2个WPF Windows与2个TextBox之间的DataBinding

时间:2014-10-10 08:29:08

标签: c# wpf

我有以下问题,我不知道为什么我的DataBinding不起作用(我已经在我的程序中以相同的方式做了一个并且它有效)。也许它不起作用因为我通过MainWindow并转到Window2,但我的参考仅在Window2上为MainWindow设置。仍然不知道如何解决它。我的代码(抱歉不得不削减它,我希望我没有忘记任何事情,因为2个窗口超过600或700行代码)

private void btLogin_Click(object sender, RoutedEventArgs e)
{
    var Window2 = new Window2();
    Login USERTB= new Login(); //reference to reach the Login table and check if we can read the logged user from it
    Window2.Show();
    USERTB.Username = tbLoginUser.Text;  //checking if it knows the username- working yet
    this.Hide();
}

在此之后,问题开始了,即使我尝试使用USER引用获取它,我的mainwindow文本框的值也没有传递给第二个。这是Window2.xaml& Window2.cs:

Window2.cs:

string action;
public string Action
{
    get { return this.action; }
    set { this.action= value; OnPropertyChanged("Action"); }
}



private void SmthHappens(object sender, DependencyPropertyChangedEventArgs e)
{
    var felh = new MainWindow(); 
    Action= felh.USER; //in here didn't pass the MW's tb value ,so here is the problem
    tbShow.Text = Action;
}

我尝试将MW的tb值传递给W2 tbShow。我想我的代码在SmthHappens上是错误的,因为我已经通过MW并且它失去了tbLoginUser的价值。但我不知道如何解决它。请帮忙!

解决了!谢谢你的答案,我解决它的方式与我尝试的方式相同。也许我稍后会检查一下MVVM,但是现在我的程序还没有多少,所以我结束了它:)

2 个答案:

答案 0 :(得分:1)

在这些情况下,WPF中常用的MVVM模式派上用场。您应该创建一个包含要共享的属性的模型类,并将其通过视图模型传递给两个表单。

有关WPF中使用的MVVM设计模式的更多信息,请阅读this article on MSDN

答案 1 :(得分:0)

您正在创建MainWindow的新实例,因此var felh不包含您之前在MainWindow的第一个实例中放置的任何数据。您应该使用Model(您需要的数据类)ViewModel(在此创建Model的实例并填写数据)并将此ViewModel用于您的两个Windows(=> Views)。那就是使用MVVM模式(简而言之)。 我建议你article

如果你从未触及过MVVM,那么在第一步中它就不会轻松,但是经过一个示例/测试程序测试之后你就会得到它并且它会让事情变得更容易!

编辑:如果您不想学习它并希望得到一个肮脏的解决方案,您可以尝试MainWindow

singleton模式