我有一个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答案 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
,然后让视图使用转换器自行适应其视图模型。