很多时候我都有这种情况:
DataGrid有自己的DataContext和DataGridTemplateColumns,我需要从CurrentItem和DataGrid DataContext访问属性。所以我最终写了大量的{Binding DataContext.Something, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}, Mode=FindAncestor}}
还有更漂亮或至少更少的代码解决方案吗?
答案 0 :(得分:0)
DataGrid是一个ItemsControl,显示的每个项目都将其DataContext设置为它正在显示的项目。很明显,你可以在DataGridXXXColumn中有一个很好的简单绑定,例如
<DataGridTextColumn Binding="{Binding Name}" Header="Name" />
但是当您指出要访问DataGrid的DataContext时,您需要使用相对源绑定。这可能看起来像很多Xaml,但我建议你应该这样做。
我能想到使Xaml更简单的唯一方法是让集合中的每个项目都有一个引用回父视图模型,这样你就可以像这样直接绑定:
<DataGridTextColumn Binding="{Binding Parent.SomeProperty}" Header="???" />
这是一个解决方案,但也许不是一个明智的解决方案。