使用父级的可见性数据上下文属性



我有一个绑定到ViewModel的ObservableCollection类型属性的DataGrid。在DataGrid中,我有几个绑定到ObservableCollection项的DataGridTextColumns。我需要访问父DataContext(ViewModel)来设置其中一个DataGridTextColumns的Visibility属性。在互联网上有一个解决方案:

{Binding DataContext.IsColumnVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}}

IsColumnVisible属性的类型为System.Windows.Visibility。这样的解决方案适用于DataGridTextColumn.Binding等其他属性,但不适用于DataGrid TextColumn.Visibility!可见性有解决方案吗?

编辑:我最终采用了以下解决方案:绑定数据网格列可见性MVVM

DataGrid列是抽象对象,不能使用ElementName(缺少名称范围)或RelativeSource(不在可视化树中)来定位它们。

此外,DataGrid列没有DataContext。。。

您可以使用BooleanToVisibilityConverter将Parent的Visibility属性转换为布尔值。

http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx

将列的Visibility属性绑定到视图模型的属性。请参阅以下SA问题。

另一件事是:使用BooleanToVisibilityConverter类。视图模型公开与视图密切相关的类型(Visibility)的属性是不好的。这在视图和视图模型之间引入了应该避免的耦合。

显示一个bool,然后使用转换器使视图适应其视图模型。

最新更新