C# 两个文件之间的XAML元素绑定?
假设我在同一个XAML文件中有两个文本框。我希望文本框2中的输入来自我在文本框1中键入的任何内容 这很简单(我想,如果我错了,请纠正我):C# 两个文件之间的XAML元素绑定?,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,假设我在同一个XAML文件中有两个文本框。我希望文本框2中的输入来自我在文本框1中键入的任何内容 这很简单(我想,如果我错了,请纠正我): 当我将TextBox2放入另一个XAML文件中时,我的理解力不足。TextBox2不再了解TextBox1。假设TextBox1位于名为“File1.xaml”的文件中,TextBox2位于名为“File2.xaml”的文件中。我可以提供哪些附加信息(以及在何处)来保持这个简单的元素链接的活动状态?您不想让MVVM术语中的窗口、用户控件或视图“了解”彼此,所
当我将TextBox2放入另一个XAML文件中时,我的理解力不足。TextBox2不再了解TextBox1。假设TextBox1位于名为“File1.xaml”的文件中,TextBox2位于名为“File2.xaml”的文件中。我可以提供哪些附加信息(以及在何处)来保持这个简单的元素链接的活动状态?您不想让MVVM术语中的
窗口、用户控件或视图“了解”彼此,所以您有两个选择
您的视图共享相同的DataContext
,这是它们的ViewModel
,两个TextBox
绑定到该ViewModel
中的同一公共属性(ViewModel
必须支持更改通知)
您的视图
s有两个不同的DataContext
s(ViewModel
s),您可以使用消息发送两个文本框
e绑定到的两个公共属性的值
下面是2使用一个MVVM框架时的样子
视图1:
DataContext="{Binding ViewModel1, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox1" Text="{Binding MyString1}"
视图模型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));
}
}
视图模型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);
}
}
RegisterToReceiveMessages(MessageTokens.MyString1,
(s,ea)=>MyString2=ea.Data);
...
私有字符串myString2;
公共字符串MyString2
{
获取{return myString2;}
设置
{
myString2=值;
NotifyPropertyChanged(m=>m.MyString2);
}
}
考虑学习MVVM和声明性数据绑定,以查看WPF中的模型对象。您的文本框不应该相互直接访问-相反,它们可以是绑定到同一变量的数据(并且更改将在框架级别自动反映)。谢谢!我理解将它们绑定到一个变量的想法,但我找不到一个简单的例子来说明这在最基本的层面上发生的情况。我希望只有两个文本框,这可能足够简单,让我想起一个解释这个概念的答案。迪恩的答案似乎是正确的。您可能想查看介绍wpf的Channel9视频。相信我,您真的希望稍后将演示文稿与业务逻辑层分离,并在视图模型中有一个单独的变量。这是你理解WPF的基础,即使你需要花费更多的时间来了解你将要学习的地方,而不是构建它,从长远来看,它会让你的生活变得更好。
DataContext="{Binding ViewModel2, Source={StaticResource Locator}}"
...
Textbox x:name="TextBox2" Text="{Binding MyString2}"
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);
}
}