【发布时间】:2017-11-01 18:07:52
【问题描述】:
我有一个包含在 UserControl 中的 WPF DataGrid。
在用户控件的 ViewModel 中,我定义了以下内容:
private Visibility _ColumnVisibility;
public Visibility ColumnVisibility
{
get { return _ColumnVisibility;}
set {this._ColumnVisibility= value;
OnNotifyPropertyChanged("ColumnVisibility");}
}
我在 XAML 中的列定义如下所示:
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding UserCode}"
Header="UserCode"
Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=ColumnVisibility}"/>
</DataGrid.Columns>
我在运行时遇到以下异常:
System.Windows.Data 错误:4:找不到绑定源 参考'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.UserControl', 祖先级别='1''。绑定表达式:路径=列可见性; 数据项=空;目标元素是“DataGridTextColumn” (哈希码=21737301);目标属性是“可见性”(类型 '可见性')
将 DataGrid 列可见性绑定到包含 UserControl 的 ViewModel 中定义的属性的最佳(最简单)方法是什么?
【问题讨论】:
-
当你想绑定到用户控件视图模型中的一个属性时,为什么要
RelativeSource? -
Dr.Fre:那么正确的绑定方式应该是……?
-
你试过了吗?
Visibility="{Binding Path=DataContext.ColumnVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}}"/> -
EP:在我的情况下,我的祖先不是 UserControl(因为它在我的属性定义的视图模型中)