Wie DataContext auf eine DataGrid-Spalte-Header
In meinem Silverlight 3 user control zeige ich eine grundlegende DataGrid Kontrolle. Ich muss erzeugen der Spalten programmgesteuert wie folgt:
Style headerStyle = (Style)Resources["ColumnHeaderStyle"];
DataGridTextColumn col = new DataGridTextColumn();
col.HeaderStyle = headerStyle;
dataGrid.Columns.Add(col);
Stil ist wie folgt definiert:
<Style x:Name="ColumnStyle" x:Key="ColumnHeaderStyle"
TargetType="prim:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Loaded="StackPanel_Loaded">
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Data}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Möchte ich den Daten-Kontext der Kopfzeile, um eine "header" - Objekt (mit "Name" und "Daten" - Eigenschaften, die auf die in der DataTemplate). Ich kann leider nicht verwenden die StackPanel_Loaded Ereignis wie vorgeschlagen anderswo, weil der event-handler wird auch aufgerufen, wenn der Benutzer beginnt, eine Spalte per drag&drop-operation.
Was ist die richtige Art der Einstellung der DataContext des DataGrid-Spalte-header?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, dass die Header-Eigenschaft (die vom Typ Objekt) als DataContext für das DataTemplate (set-wie oben gezeigt):
Hier ist, wie Sie es tun würde, in XAML (dies funktioniert in WPF; nicht sicher, ob es funktioniert in SL)
Basierend auf Matt ' s Antwort, ich kam mit der Lösung der Bindung der header auf der
DataGridCellsPanel
die in Snoop schien die richtigen Daten Kontext :- Und das ist nicht aufdringlich in den Weg, dass Sie noch erbt von individuell gestalteten überschriften (siehe Beispiel oben) oder-Ereignis der Basis-Spalte-header style:
Diese Lösung hat den Vorteil, dass Sie rein und sauber XAML und verweisen auf die nächsten Vorfahren halten die richtige datacontext, anstatt zu versuchen, zu erreichen datacontext der obersten Hierarchie-Elemente wie UserControl.
solution
alle Urheberrechte einzuhalten :).