2009-04-10 3 views
2

Я использую DataGrid WPF с DataGridTemplateColumn. DataGridTemplateColumn.CellEditingTemplate содержит ComboBox с IsEditable, установленным как 'true'. В обработчике событий RowEditEnding я хотел бы прочитать свойство Text этого ComboBox - единственная проблема в том, что я не знаю, как получить экземпляр ComboBox в обработчике событий, чтобы добраться до свойства Text.DataGrid: Справка по доступу к элементу управления, определенному в CellEditingTemplate

Для справки, вот мой DataTemplate:

<!-- ... --> 
    <my:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <ComboBox IsEditable="True" ItemsSource="{Binding Source={StaticResource ProductCategories}}" SelectedItem="{Binding Path=Name}" DisplayMemberPath="Name" /> 
     </DataTemplate> 
    </my:DataGridTemplateColumn.CellEditingTemplate> 
    <!-- ... --> 

И мой код:

private void productsDataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
    { 
     // UH-OH! Where do I find the ComboBox instance? 
    } 

Я знаю, что я могу получить к текущей затрагиваемой строке, используя e.Row ... Может быть, решение что-то использует e.Row? Я пробовал рекурсивно просматривать визуальное дерево с e.Row вниз, ища экземпляр ComboBox, но без кубиков. Я почти уверен, что решение прост, однако, я релятививно новичок в WPF в целом. Любые предложения были бы высоко оценены.

Спасибо!

+0

Вы нашли решение? – Shimmy

ответ

1

вы можете получить де COMBOBOX Колонка прямо с вашего DataGrid с помощью этого кода

var cbx = (DataGridComboBoxColumn)productsDataGrid.Columns.First(a => a.Header.ToString() == "name of your column"); 
+0

Итак, как вы попадаете на CellEditingTemplate? OP говорил о DataGridTemplateColumn, а не о DataGridComboBoxColumn. – Shimmy

1

кажется доступ к CellEditingTemplate доступен только в том случае PreparingCellForEdit в DataGrid. Вы можете подключить вверх правша для этого события на DataGrid и сделать что-то вроде этого на обработчике, чтобы добраться до ComboBox

private void _CounterGoalsGrid_PreparingCellForEdit(object sender, 
    DataGridPreparingCellForEditEventArgs e) 
    { 
     ComboBox editCombo = (e.EditingElement.FindName("<your combobox name>") as ComboBox); 
    } 
  • Запомните имя вашего ComboBox в XAML.