我想将datagrid标头绑定到网格的DataContext上的属性。现在,我得到了它的工作,但我认为这是一个暂时的解决方案:
<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>
此解决方案的最大问题是它使绑定更加脆弱(对上下文敏感)。如果网格的DataContext用于主/详细方案(这使得DataContext成为BindingList而不是单个项),我将不得不用DataContext={Binding /}
替换更新DataGrid DataContext。
是否有更强大的方法从DataGrid.HeaderTemplate绑定而不是使用ElementName并引用DataContext?
答案 0 :(得分:0)
一个简单的解决方案是使用命名资源
<UserControl.Resources>
<ResourceDictionary>
<MyNamespace:MyHeaderProvider x:Key="MyHeaderProvider">
</ResourceDictionary>
</UserControl.Resources>
...
Header="{Binding Path=HeaderText, Source={StaticResource MyHeaderProvider}"
如果一切都是动态的,这可能行不通。当我创建一个包含更多动态/数据驱动列的网格时,我没有在XAML中定义它们,而是在后面的代码中生成它们,在那里您不必执行相关的DataContext。