Chr*_*ang 11 data-binding wpf datagrid mvvm
我知道之前已经问过这个问题,但是"以前的"答案似乎对我没什么影响......
我已经在我的应用程序中实现了多语言的功能,因此我必须将DataGrid列的标头绑定到DataContext.
我在DataContext中使用一个字典(在下面的例子中称为Text)来存储文本,并且绑定可以与文本块,按钮等一起使用.
<TextBlock Text="{Binding Text[Name], FallbackValue='Name'" />
Run Code Online (Sandbox Code Playgroud)
但是,我无法使用它来处理DataGrid列的Header属性.
我在某处读到,我需要为列/标题编写一个模板来实现这一点,但我也无法解决这个问题.
H.B*_*.B. 34
您可能需要向上返回树以获取所需的DataContext:
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
直接在Header属性上执行此操作将不起作用,因为它无法就地解析,因为列是未出现在树中的抽象对象.
小智 5
正确的。可视化树中没有 elemet 直接映射到,DataGridTextColumn因此您不能使用RelativeSourcewith AncestorType(即DataGridTextColumn不是控件,因此它没有父控件)。下面的代码应该可以正常工作
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding DataContext.Text[Name],
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)