2009-04-10 5 views
2

Ich verwende das WPF DataGrid mit einer DataGridTemplateColumn. Die DataGridTemplateColumn.CellEditingTemplate enthält eine ComboBox, bei der IsEditable auf 'true' gesetzt ist. In meinem RowEditEnding-Ereignishandler möchte ich die Text-Eigenschaft dieser ComboBox lesen - das einzige Problem ist, dass ich nicht weiß, wie ich die ComboBox-Instanz innerhalb des Ereignishandlers abrufen kann, um zur Text-Eigenschaft zu gelangen.DataGrid: Hilfe beim Zugriff auf ein in einem CellEditingTemplate definiertes Steuerelement

Als Referenz hier ist meine Datatemplate:

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

Und mein Code:

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

Ich weiß, dass ich auf die aktuelle betroffen Reihe mit e.Row bekommen kann ... Vielleicht ist die Lösung beinhaltet etwas mit e.Row? Ich habe versucht, den visuellen Baum rekursiv aus e.Row nach einer Instanz von ComboBox suchen, aber keine Würfel. Ich bin fast sicher, dass die Lösung einfach ist, aber ich bin relativ neu bei WPF im Allgemeinen. Alle Vorschläge würden sehr geschätzt werden.

Danke!

+0

Haben Sie eine Lösung gefunden? – Shimmy

Antwort

1

können Sie de Combobox Spalte direkt von Ihrem Datagrid erhalten diesen Code mit

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

Wie kommen Sie zum CellEditingTemplate? Das OP sprach über eine DataGridTemplateColumn, nicht eine DataGridComboBoxColumn. – Shimmy

1

Es scheint, Zugang zum CellEditingTemplate ist nur während der PreparingCellForEdit Ereignis im Datagrid zur Verfügung. Sie könnten eine hander für dieses Ereignis auf dem Datagrid verkabeln und auf dem Handler etwas tun, um Ihre ComboBox zu bekommen

private void _CounterGoalsGrid_PreparingCellForEdit(object sender, 
    DataGridPreparingCellForEditEventArgs e) 
    { 
     ComboBox editCombo = (e.EditingElement.FindName("<your combobox name>") as ComboBox); 
    } 
  • Denken Sie daran, Ihre ComboBox in XAML zu nennen.