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

前端之家收集整理的这篇文章主要介绍了如何在涉及`MainWindow`(C#)的WPF Windows之间传递数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在开始一个C#项目,我正在为一台简单的ATM机建模,因此需要几个屏幕.在编写StockTicker棋盘游戏改编之前,我遇到了在屏幕之间传递数据的问题,但我不认为我的解决方法非常好.

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

虽然这适用于一个小应用程序,但我认为,对于需要传递给Window2的更多内容,这将变得非常冗长/混乱.另外,我根本不知道如何从Window2访问我在MainWindow上声明的任何方法.由于MainWindow是主屏幕,因此我的大多数编码都在同类中.

>如何从Window2访问我在MainWindow中放入的方法

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

这是我的C#代码(我试图有明确的变量名称).程序的要点是,您可以在表单1上存储一些数据,然后在单击按钮时将其传递给表单2.从这里开始,它可以根据用户的意愿进行修改,然后在表单2关闭时可以从表单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#相关文章