具有2个文本框的2个WPF窗口之间的数据绑定

本文关键字:2个 之间 数据绑定 窗口 WPF 具有 文本 | 更新日期: 2023-09-27 18:26:11

我有以下问题,我不知道为什么我的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引用来获取它,我的主窗口中的文本框的值也没有传递给第二个。这是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,它失去了tbLogiUser的值。但我不知道怎么解决。请帮忙!

解决了!谢谢你的回答,我用我尝试的方法解决了它。也许我稍后会检查MVVM,但现在我的程序没有太多剩余,所以我结束了它:)

具有2个文本框的2个WPF窗口之间的数据绑定

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

有关WPF中使用的MVVM设计模式的更多信息,请阅读MSDN上的这篇文章。

您正在创建MainWindow的新实例,因此var felh不包含您之前放入MainWindow的第一个实例中的任何数据。您应该使用Model(用于所需数据的类)ViewModel(在此处创建Model的实例并填充数据),并将此ViewModel用于两个窗口(=>视图)。这将是MVVM模式的使用(简而言之)。我建议你写这篇文章。

如果你以前从未接触过MVVM,那么第一步就不容易了,但经过示例/测试程序测试,你会得到它,它会让事情变得更容易!

编辑:如果你不想学习它,并且想得到一个脏的解决方案,你可以尝试MainWindow 的单例模式