我有一个按钮button_extract
。我想将它绑定到两个不同的数据上下文(不同名称空间中的两个类)
我想将Command和IsEnabled
属性设置为不同的数据上下文。
我为Command属性设置了一个datacontext
。但是如何指定IsEnable
属性的datacontext
,这是在不同的类和命名空间中。这是一个场景:-
我有一个名为Environments的项目,它有三个名称空间:Viewmodel、Data和ViewViewmodel具有类A数据具有B类视图具有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的数据上下文设置为Enviornment.B的数据上下文???
您似乎对WPF有一个常见的误解,即需要设置DataContext
。事实上,很少需要在任何控件上设置DataContext
,因为通常Window
已经设置了DataContext
,并且每个控件的DataContext
将自动继承。
那么,如何将数据绑定到两个不同的地方呢?通常,一个地方将使用普通的Binding Path
,而另一个地方则使用RelativeSource Binding Path
。然而,如果您希望数据绑定到集合DataContext
的属性和控件代码隐藏的属性,则情况会更糟。
在您的场景中,简单地准备视图模型更为常见。这是一个自定义类,用于实现INotifyPropertyChanged
接口,并提供Window
、UserControl
或"视图"所需的所有属性和功能。然后,您可以将此单个对象的一个实例设置为DataContext
。
因此,只需将相关类的属性添加到视图模型中,就可以使用一个DataContext
对象访问所有类。请在线搜索MVVM以获取更多信息。