2014-02-06 46 views
0

假设我在同一个XAML文件中有两个文本框。我想在文本框2输入来自不管我在文本框12个文件之间的XAML元素绑定?

够简单类型(我想,纠正我,如果我错了):

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”的文件中。我可以提供哪些附加信息(以及何处)保持元素的相同简单链接的存在?

+2

考虑学习MVVM和声明式数据绑定在WPF查看模型对象。您的文本框不应该直接访问对方 - 相反,它们可以是数据绑定到同一个变量(并且更改将在框架级自动反映)。 –

+0

谢谢!我理解将它们绑定到一个变量的想法,但是在最基本的层面上我找不到这种简单的例子。我希望只用两个文本框,这可能很简单,足以唤起一个答案,向我解释这个概念。 –

+0

Dean的答案似乎是正确的。您可能想要查看介绍wpf的Channel9视频。相信我,您真的很想将您的演示文稿稍后与业务逻辑层分开,并在视图模型中有单独的变量。这对于你理解WPF是非常重要的,即使需要几个小时的时间来学习你将要学习的东西,而不是构建它,从长远来看,你的生活会变得更好。 –

回答

1

你不希望你的Window S,UserControl秒或View S IN MVVM术语“知道”对方,所以你有两个选择......

  1. 大家的意见共享相同的DataContext这是他们的ViewModel和两个TextBox es被绑定到该ViewModel(该ViewModel将不得不支持更改通知)相同的公共属性。
  2. View■找两个不同的DataContext S(ViewModel S),并使用短信发送两个公共性质的两种TextBox ES必将来回的值...

这里是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:

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); 
     } 
} 
相关问题