gpt4 book ai didi

c# - 我应该如何在涉及 `MainWindow` (C#) 的 WPF Windows 之间传递数据?

转载 作者:太空狗 更新时间:2023-10-29 18:24:43 37 4
gpt4 key购买 nike

我目前正在启动一个 C# 项目,在该项目中我正在为一台简单的 ATM 机建模,因此需要多个屏幕。我之前在编写 StockTicker 棋盘游戏改编代码时遇到过在屏幕之间传递数据的问题,但我认为我解决它的方法不是很好。

我的很多问题都源于我使用 MainWindow 作为应用程序的主窗口这一事实。我能够轻松地将数据从辅助窗口传递回主窗口,因为我能够在关闭后访问 Window1 类的属性。但是,要从 MainWindow 转移到 Window2,我必须向 Window2 的构造函数添加一个参数,这将使我能够传递必要的值(value)观。

虽然这确实适用于小型应用程序,但我认为对于需要传递给 Window2 的更多内容,这会变得非常冗长/困惑。此外,我完全不知道如何从 Window2 访问我在 MainWindow 上声明的任何方法。因为 MainWindow 是主屏幕,所以我的大部分代码都在它的类中。

  • 如何从 Window2 访问我放在 MainWindow 中的方法??

(为了澄清)我花了一些时间环顾四周,找不到一个明确的例子,具体涉及 MainWindow,并且需要访问其中的变量/方法。


这是我的 C# 代码(我尝试使用清晰的变量名称)。该程序的要点是您可以将一些数据存储在 Form 1 上,然后在单击按钮时将其传递给 Form 2。从这里,可以根据用户的意愿对其进行修改,然后在关闭 Form 2 时可以从 Form 1 再次访问它。

在这个例子中,我只是展示我找到了一种将数据从一个表单传输到另一个表单的方法,但我确信还有更好的方法。具体来说,我确信有一种更好的方法,而不是必须为 Window2 类编写具有不同参数的不同构造函数。


第一个 WPF 窗口代码:

namespace Banking_System
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void btnSwitchForm_Click(object sender, RoutedEventArgs e)
{
string strForm1Text = txtForm1TextBox.Text;

Window2 newWindow = new Window2(strForm1Text);
newWindow.ShowDialog();

txtForm2TextBox.Text = newWindow.strForm2Text;
}
}
}

第二个 WPF 窗口代码:

namespace Banking_System
{
public partial class Window2 : Window
{
public string strForm2Text { get; set; }

public Window2(string form1)
{
InitializeComponent();

txtForm1.Text = form1;
}

private void btnSwitchBack_Click(object sender, RoutedEventArgs e)
{
strForm2Text = txtForm2TextBox.Text;
this.Close();
}
}
}

我是否最好创建另一个 WPF 窗口,并在 MainWindow 加载后立即加载它,然后隐藏 MainWindow 并“假装”另一个窗口是主屏幕?因为这样我就可以像上面那样简单地访问属性(当从 Window2 传输到 MainWindow 时)。

即。当需要从另一个窗口访问变量/方法时,只需声明一个新的临时窗口并访问它的属性/方法:

FakeMainWindow wndPrimary = new FakeMainWindow();
wndPrimary.strProperty= "test";
wndPrimary.methodCall();

这种方式对我的主要吸引力是我可以访问另一个窗口上的方法(如上图所示),这是我在使用 MainWindow 作为我的主要形式时无法做到的。

总结

  • 如何从 Window2 访问我放在 MainWindow 中的方法?
  • 创建另一个 WPF 窗口并假装它是我的“主屏幕”以便我可以轻松访问它的属性是否更好?
  • 如果没有,是否有更好的方法来使用 MainWindow

如果我遗漏了什么,请告诉我。谢谢!

最佳答案

您实际上可以访问应用程序的主窗口,而无需在窗口之间传递任何引用。 Application.Current.MainWindow 返回在 app.xaml 中声明的主窗口的实例。它返回一个 Window(您的主窗口派生自该窗口),因此您需要转换它才能访问其成员。

例如,您可以在第二个窗口中使用此代码:

((MainWindow)Application.Current.MainWindow).txtForm1TextBox.Text = "Some text";

话虽如此,我还是建议您对 WPF 设计模式进行一些研究(特别是 MVVM)。

关于c# - 我应该如何在涉及 `MainWindow` (C#) 的 WPF Windows 之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063550/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com