Wpf 将DataGrid列标题绑定到DataContext
我知道以前有人问过这个问题,但“以前”的答案似乎都不适合我 我已经在我的应用程序中实现了多语言的功能,因此我必须将DataGrid列的标题绑定到DataContext 我在DataContext中使用了一个字典(在下面的例子中称为Text)来存储文本,绑定可以很好地处理文本块、按钮等Wpf 将DataGrid列标题绑定到DataContext,wpf,data-binding,mvvm,datagrid,Wpf,Data Binding,Mvvm,Datagrid,我知道以前有人问过这个问题,但“以前”的答案似乎都不适合我 我已经在我的应用程序中实现了多语言的功能,因此我必须将DataGrid列的标题绑定到DataContext 我在DataContext中使用了一个字典(在下面的例子中称为Text)来存储文本,绑定可以很好地处理文本块、按钮等 <TextBlock Text="{Binding Text[Name], FallbackValue='Name'" /> 但是,我无法在DataGrid列的Header属性上使用此功能 我在某
<TextBlock Text="{Binding Text[Name], FallbackValue='Name'" />
但是,我无法在DataGrid列的Header属性上使用此功能
我在某个地方读到,我需要为列/标题编写一个模板来实现这一点,但我也无法解决这个问题。您可能需要返回树以获取所需的数据上下文:
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
直接在标题
属性上执行此操作将不起作用,因为该列是一个抽象对象,没有出现在树中,因此无法就地解析。正确。
可视化树中没有直接映射到DataGridTextColumn
的元素,因此不能将RelativeSource
与AncestorType
一起使用(即DataGridTextColumn
不是控件,因此它没有父控件)。
下面的代码应该可以正常工作
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
Header vs HeaderTemplate是关键。谢谢。谢谢,这比HeaderTemplate解决方案痛苦少,而且仍然有效。但是有没有一种方法可以使用头=“{Some stringized binding}”
属性来实现同样的技巧呢?在.NET 4.5和4.6上尝试过这种方法,虽然有点奏效,但它导致了不一致的行为,即当绑定对象更新时,数据网格
无法可靠地更新。不过,公认答案中的方法确实能始终如一地发挥作用。