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

时间:2014-02-06 17:53:08

标签: c# wpf xaml binding

假设我在同一个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"的文件中。我可以提供哪些附加信息(以及在哪里)保持元素的这个简单链接活着?

1 个答案:

答案 0 :(得分:1)

您不希望MVVM术语中的WindowUserControlView彼此“了解”,因此您有两个选项...

  1. 您的观看点共享DataContext ViewModelTextBoxViewModel两个ViewModel绑定到View中的同一个公共属性({{1}必须支持更改通知)。
  2. 您的DataContext有两个不同的ViewModel s(TextBox s)并且您使用消息传递来发送两个公共属性的值DataContext="{Binding ViewModel1, Source={StaticResource Locator}}" ... Textbox x:name="TextBox1" Text="{Binding MyString1}" es绑定到来回......
  3. 以下是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}}