我正在学习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帮助。
答案 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)。