假设我在同一个XAML文件中有两个文本框。我希望文本框2中的输入来自我在文本框1中键入的内容。
这很简单(我想,如果我错了,请纠正我):
Textbox x:name="TextBox1" Text="Your Text Here"
Textbox x:name="TextBox2" Text="{Binding ElementName=TextBox1, Path=Text}"
当我使用TextBox2并将其放入另一个XAML文件时,我的理解不足。 TextBox2不再了解TextBox1。假设TextBox1位于名为" File1.xaml"的文件中。和TextBox2在一个名为" File2.xaml"的文件中。我可以提供哪些附加信息(以及在哪里)保持元素的这个简单链接活着?
答案 0 :(得分:1)
您不希望MVVM术语中的Window
,UserControl
或View
彼此“了解”,因此您有两个选项...
DataContext
ViewModel
,TextBox
和ViewModel
两个ViewModel
绑定到View
中的同一个公共属性({{1}必须支持更改通知)。DataContext
有两个不同的ViewModel
s(TextBox
s)并且您使用消息传递来发送两个公共属性的值DataContext="{Binding ViewModel1, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox1" Text="{Binding MyString1}"
es绑定到来回...... 以下是2使用其中一个MVVM框架的样子......
查看1:
private string myString1;
public string MyString1
{
get { return myString1; }
set
{
myString1 = value;
NotifyPropertyChanged(m => m.MyString1);
SendMessage(MessageTokens.MyString1, new NotificationEventArgs<string>
("Message", myString1));
}
}
ViewModel 1:
DataContext="{Binding ViewModel2, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox2" Text="{Binding MyString2}"
观看2:
RegisterToReceiveMessages<string>(MessageTokens.MyString1,
(s, ea) => MyString2 = ea.Data);
...
private string myString2;
public string MyString2
{
get { return myString2; }
set
{
myString2 = value;
NotifyPropertyChanged(m => m.MyString2);
}
}
ViewModel 2:
{{1}}