将单个控件绑定到wpf中的不同Datacontext

时间:2014-10-09 06:17:33

标签: c# wpf

我有一个按钮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 ???

1 个答案:

答案 0 :(得分:1)

您似乎对WPF有一个关于需要设置DataContext的常见误解。实际上,很少需要在任何控件上设置DataContext,因为Window通常设置了DataContext,并且每个控件的DataContext都会自动从中继承Binding Path

那么,如何将数据绑定到两个不同的地方?通常,一个地方使用普通RelativeSource Binding Path,另一个地方使用DataContext。但是,对于您希望将数据绑定到控件代码后面的集INotifyPropertyChanged 属性的属性的情况,情况会更多。

在您的方案中,更常见的是准备一个视图模型。这是一个自定义类,用于实现Window接口,并提供 UserControlDataContext或“视图”所需的所有属性和功能。然后,您可以将此单个对象的实例设置为DataContext

因此,只需将相关类的属性添加到视图模型中,然后您就可以使用单个{{1}}对象访问它们。请在线搜索MVVM以获取更多信息。

相关问题