【发布时间】:2015-07-15 19:28:33
【问题描述】:
我目前正在启动一个 C# 项目,在该项目中我正在为一台简单的 ATM 机建模,因此需要多个屏幕。在编写 StockTicker 棋盘游戏改编代码之前,我遇到过在屏幕之间传递数据的问题,但我认为我的解决方法不是很好。
我的很多问题都源于我使用MainWindow 作为应用程序的主窗口这一事实。我可以轻松地将数据从辅助窗口传回主窗口,因为我可以在关闭 Window1 类后访问它的属性。但是,要从MainWindow 转移到Window2,我必须在Window2 的构造函数中添加一个参数,这将使我能够传入必要的值。
虽然这确实适用于小型应用程序,但我认为对于需要传递给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?
如果我遗漏了什么,请告诉我。谢谢!
【问题讨论】:
-
MvvmLight 消息,Prism 事件聚合器,为胜利解耦消息