.net 如何将WPF DataGrid DataColumns可见性绑定到UserControl的ViewModel上的属性?
我有一个包含在UserControl中的WPF数据网格 在用户控件的ViewModel中,我定义了以下内容: 我在XAML中的列定义如下所示: 我在运行时遇到以下异常: System.Windows.Data错误:4:找不到与绑定的源 参考“相对资源查找器”, AncestorType='System.Windows.Controls.UserControl', 1级。BindingExpression:Path=ColumnVisibility; DataItem=null;目标元素是“DataGridTextColumn” HashCode=21737301;目标属性是“可见性”类型 “可见性”.net 如何将WPF DataGrid DataColumns可见性绑定到UserControl的ViewModel上的属性?,.net,wpf,xaml,mvvm,.net,Wpf,Xaml,Mvvm,我有一个包含在UserControl中的WPF数据网格 在用户控件的ViewModel中,我定义了以下内容: 我在XAML中的列定义如下所示: 我在运行时遇到以下异常: System.Windows.Data错误:4:找不到与绑定的源 参考“相对资源查找器”, AncestorType='System.Windows.Controls.UserControl', 1级。BindingExpression:Path=ColumnVisibility; DataItem=null;目标元素是“Dat
将DataGrid列可见性绑定到包含UserControl的ViewModel中定义的属性的最佳方法是什么?我在AnjumSKhan的SO中找到了一个优雅的解决方案:
为什么要绑定到usercontrol视图模型中的属性时使用RelativeSource?Fre博士:那么正确的绑定方式应该是…?您尝试过这个吗?Visibility={Binding Path=DataContext.ColumnVisibility,RelativeSource={RelativeSource AncestorType=DataGrid}}/>EP:在我的情况下,我的祖先不是UserControl吗?因为它在viewmodel中定义了我的属性
private Visibility _ColumnVisibility;
public Visibility ColumnVisibility
{
get { return _ColumnVisibility;}
set {this._ColumnVisibility= value;
OnNotifyPropertyChanged("ColumnVisibility");}
}
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding UserCode}"
Header="UserCode"
Visibility="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=ColumnVisibility}"/>
</DataGrid.Columns>
<!--
AnjumSKhan: I would prefer a more elegant approach which involves using a Freezable.
-->
<Window.Resources>
<DiscreteObjectKeyFrame x:Key="FlagKey" Value="{Binding Flag}"/>
</Window.Resources>