C# 两个文件之间的XAML元素绑定?

C# 两个文件之间的XAML元素绑定?,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,假设我在同一个XAML文件中有两个文本框。我希望文本框2中的输入来自我在文本框1中键入的任何内容 这很简单(我想,如果我错了,请纠正我): 当我将TextBox2放入另一个XAML文件中时,我的理解力不足。TextBox2不再了解TextBox1。假设TextBox1位于名为“File1.xaml”的文件中,TextBox2位于名为“File2.xaml”的文件中。我可以提供哪些附加信息(以及在何处)来保持这个简单的元素链接的活动状态?您不想让MVVM术语中的窗口、用户控件或视图“了解”彼此,所

假设我在同一个XAML文件中有两个文本框。我希望文本框2中的输入来自我在文本框1中键入的任何内容

这很简单(我想,如果我错了,请纠正我):


当我将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);
           }
    }