2016-11-23 5 views
3

Ich bin auf der Suche nach dem Layout einer DataGrid-Zelle im Code-Behind nach dem Laden der Zelle zu ändern.WPF Datagrid - Abonnement für Zellladeereignis?

Ich weiß, dass ich auf den DataGrid.Load abonnieren kann oder die DataGrid.LoadingRow Ereignisse, aber ich hoffe, es ist ein Weg, um eine bestimmte Person Zelle Ladeereignis zu abonnieren, so dass die Umsetzung sauberer ist. In documentation scheint die Zellklasse das Ereignis (geerbt von FrameworkElement), aber ich kann keine Möglichkeit finden, das Ereignis sauber zu abonnieren.

Ich verwende eine DataGridTemplateColumn, ich dachte, es wäre leicht gewesen, es in der XAML (CellTemplate) zu tun.

<DataGridTemplateColumn Header="ATTENDEES" Width="*"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding Path=attendees}" x:Name="AttendeesItemsControl"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

Vielen Dank!

Antwort

2

können Sie die DataGridColumn.CellStyle verwenden zusammen mit einem EventSetter das erreichen:

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.CellStyle> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <EventSetter Event="Loaded" Handler="CellLoaded" /> 
     </Style> 
    </DataGridTemplateColumn.CellStyle> 
</DataGridTemplateColumn> 

Und in Code-behind:

private void CellLoaded(object sender, EventArgs e) 
{ 
    var cell = (DataGridCell)sender; 
    ... 
} 
+0

was ist mit dem "initialisierte" Event? Ich habe dasselbe gemacht: , markiert "Initialized", das Ereignis Initialized ist kein geroutetes Element –

+1

@KhalilLazhar Nun, wie die Fehlermeldung besagt, ist 'Initialized' kein 'RoutedEvent' und kann daher nicht mit' EventSetter' verwendet werden. Ich bin mir nicht sicher, ob es eine einfache Möglichkeit gibt, dieses Ereignis auf 'DataGridCell' zu abonnieren. Ich denke nicht, dass es eine gute Idee ist, da dieses Ereignis nur einmal ausgelöst wird, während "DataGridCell" als Container für verschiedene Zellenwerte dienen kann, da es möglicherweise wiederverwendet wird, wenn die Virtualisierung aktiviert ist. – Grx70

+0

Ja, das ist was ich will, ein Ereignis, das nur einmal ausgelöst wird, irgendwelche Ideen über die Subskription? Danke –