在控件上设置的第二个DataBinding,来自Xaml或控件的Codebehind无法在WPF中工作

时间:2017-05-18 13:21:59

标签: wpf

我正在学习WPF数据绑定。我有以下场景。 这是我的Form1.xaml.cs

 ViewModel1 VM1;
 ViewModel2 VM2;
 Public Form1()
 {
    InitializeComponent();
    VM1 = new ViewModel1();
    VM2 = new ViewModel2;
    this.DataContext=VM1;
 }

Form1.Xaml 这很好(CurrentRec是来自ObservableCollection<> VM1集合的当前选择的记录):

<TextBox x:Name="txtTest1" IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description1}"/>

这不起作用。第二个Textbox绑定到第二个ViewModel上的属性,即VM2(CurrentRec这里是来自ObservableCollection&lt;&gt; VM2集合的当前选择的记录):

<TextBox x:Name="txtTest2" DataContext={Binding VM2} IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description2}"/>
我甚至试过这个:

 <TextBox x:Name="txtTest2" DataContext={Binding VM2.CurrentRec} IsEnabled="{Binding SearchFound}" Text="{Binding Description2}"/>

但到目前为止,我还没有为我工作.Plz帮助。

1 个答案:

答案 0 :(得分:0)

DataContext="{Binding VM2}"

仅当VM2是DataContext(ViewModel1)的属性时才会起作用。 WPF将仅在控件DataContext中查找绑定属性。

如果VM2是Form1的属性,您可以尝试以下操作:

<TextBox x:Name="txtTest2" DataContext="{Binding VM2, RelativeSource={RelativeSource AncestorType={x:Type local:Form1}}}" IsEnabled="{Binding CurrentRec.SearchFound}" Text="{Binding CurrentRec.Description2}"/

但这不是最好的方法。最好的方法是为每个View创建一个DataContext(ViewModel)。