将单个控件绑定到wpf中的不同数据内容



我有一个按钮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接口,并提供WindowUserControl或"视图"所需的所有属性和功能。然后,您可以将此单个对象的一个实例设置为DataContext

因此,只需将相关类的属性添加到视图模型中,就可以使用一个DataContext对象访问所有类。请在线搜索MVVM以获取更多信息。

最新更新