我知道之前已经问过这个问题,但是“以前的”答案似乎都不适合我......
我在我的应用程序中实现了多语言功能,因此我必须将DataGrid列的标题绑定到DataContext。
我使用DataContext中的字典(在下面的示例中称为Text)来存储文本,并且绑定可以与文本块,按钮等一起使用。
<TextBlock Text="{Binding Text[Name], FallbackValue='Name'" />
但是,我无法使用它来处理DataGrid列的Header属性。
我在某处读到,我需要为列/标题编写一个模板来实现这一点,但我也无法解决这个问题。
答案 0 :(得分:32)
您可能需要向上走回树以获取所需的DataContext:
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
直接在Header
属性上执行此操作将不起作用,因为无法就地解析,因为该列是未出现在树中的抽象对象。
答案 1 :(得分:4)
正确。
视觉树中没有elemet直接映射到DataGridTextColumn
,因此您无法将RelativeSource
与AncestorType
一起使用(即DataGridTextColumn
不是控件,因此它没有父母控制)。
下面的代码应该可以正常工作
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>