Je veux lier mon en-tête DataGrid à une propriété sur le DataContext de la grille. Maintenant, je l'ai à travailler, mais je considère que cette solution temporaire:Comment lier DataGridColumn.Header à la propriété ViewModel?
<DataGrid x:Name="grid" ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Description}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding ElementName=grid, Path=DataContext.ItemsUnit}"></TextBlock>
</DataTemplate>
Le plus gros problème avec cette solution est qu'elle rend plus fragile fixation (sensible au contexte). Si le DataContext de la grille est utilisé dans un scénario maître/détail (ce qui rend le DataContext un BindingList au lieu d'un seul élément), je devrai remplacer update DataGrid DataContext par DataContext={Binding /}
.
Existe-t-il un moyen plus fiable de lier à partir du DataGrid.HeaderTemplate que d'utiliser ElementName et se référant au DataContext?
Comment ça marche? Les informations contenues dans les en-têtes sont obtenues à partir des propriétés du ViewModel (lié au Grid DataContext), noe d'une source statique (comme un fournisseur d'informations d'en-tête) – Marius
où créez-vous le DataContext de la Grid? l'alternative que j'ai mentionnée (créer les définitions de colonne dans le fichier CS, pas XAML) pourrait être mieux pour vous. –
voici deux ressources décentes sur la création de colonnes dynamiques: http://elegantcode.com/2010/03/08/silverlight-datagrid-populate-dynamic-columns-from-a-child-collection/ ET http: // www .silverlightshow.net/items/Définition de Silverlight-DataGrid-Columns-at-Runtime.aspx –