使用父级的DataContext for Visibility属性

时间:2012-01-13 17:18:14

标签: .net wpf xaml data-binding datagrid

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

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

IsColumnVisible属性的类型为System.Windows.Visibility。此类解决方案适用于其他属性,如DataGridTextColumn.Binding,但不适用于DataGridTextColumn.Visibility! 是否有可见性解决方案?

编辑:我最终采用了以下解决方案: Bind datagrid column visibility MVVM

3 个答案:

答案 0 :(得分:2)

DataGrid列是抽象对象,您无法使用ElementName(缺少namescope)或RelativeSource(不在可视树中)来定位它们。

此外,DataGrid列没有DataContext ...

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

将列的Visibility属性绑定到视图模型的属性。 请参阅the following SA question

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

公开bool,然后让视图使用转换器自行适应其视图模型。