我有一个绑定到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
,然后使用转换器使视图适应其视图模型。