我有一个按钮button_extract
。我想将它绑定到两个不同的数据上下文(不同名称空间中的2个类)
我想将Command和IsEnabled
属性设置为不同的数据上下文。
我为Command属性设置了一个datacontext
。但是如何指定不同类和命名空间中datacontext
属性的IsEnable
。这是场景: -
我有一个名为Environments的项目有三个命名空间:Viewmodel,Data和View Viewmodel有A类 数据有B类 View有xaml C,按钮button_extract。
C的数据上下文设置为A类.xaml如下
<UserControl x:Class="Enviornment.Views.C"
DataContext="Environment.Viewmodel.A">
<Button Name="button_extract" Command="{Binding ExtractButtonClick}" IsEnabled="{Enviornment.B.SelectedEnvionment}" >Extract</Button>
上述代码不起作用。 IsEnabled的绑定抛出错误。如何将IsEnabled的datacontext设置为Enviornment.B ???
答案 0 :(得分:1)
您似乎对WPF有一个关于需要设置DataContext
的常见误解。实际上,很少需要在任何控件上设置DataContext
,因为Window
通常设置了DataContext
,并且每个控件的DataContext
都会自动从中继承Binding Path
。
那么,如何将数据绑定到两个不同的地方?通常,一个地方使用普通RelativeSource Binding Path
,另一个地方使用DataContext
。但是,对于您希望将数据绑定到控件代码后面的集INotifyPropertyChanged
和属性的属性的情况,情况会更多。
在您的方案中,更常见的是准备一个视图模型。这是一个自定义类,用于实现Window
接口,并提供 UserControl
,DataContext
或“视图”所需的所有属性和功能。然后,您可以将此单个对象的实例设置为DataContext
。
因此,只需将相关类的属性添加到视图模型中,然后您就可以使用单个{{1}}对象访问它们。请在线搜索MVVM以获取更多信息。