从Utils类更改主窗口内容

时间:2018-12-06 13:55:59

标签: c# wpf windows

当我尝试从Utils类更改UI时,我得到错误消息由于StackOverflowException而终止了进程。 ColdStorageDesktopApp.exe中发生了'System.StackOverflowException'类型的未处理异常

 class Utils
            {
                MainWindow mainWindow = new MainWindow();
                private bool signedIn = false;

                public void UpdateUI()
                {
                    if (signedIn)
                    {
                        mainWindow.Sign_In_Button.Visibility = Visibility.Collapsed;
                        mainWindow.Sign_Out_Button.Visibility = Visibility.Visible;
                        mainWindow.Balance_Button.IsEnabled = true;
                        mainWindow.Send_Assets_Button.IsEnabled = true;
                        mainWindow.Settings_Button.IsEnabled = true;
                    }
                    else
                    {
                        mainWindow.Sign_In_Button.Visibility = Visibility.Visible;
                        mainWindow.Sign_Out_Button.Visibility = Visibility.Collapsed;
                        mainWindow.Balance_Button.IsEnabled = false;
                        mainWindow.Send_Assets_Button.IsEnabled = false;
                        mainWindow.Settings_Button.IsEnabled = false;
                    }
                }

这是我的MainWindow.cs

public partial class MainWindow : Window
    {
        Utils utils = new Utils();

        public MainWindow()
        {
            InitializeComponent();

            utils.UpdateUI();
        }

1 个答案:

答案 0 :(得分:0)

抛出Name异常是因为创建对象实例的过程不断循环。

StackOverflow创建MainWindow,创建Utils,创建MainWindow,创建Utils,创建MainWindow ...等等

您不应该在Utils中创建MainWindow。应用程序中应该只有一个Utils实例。

相反,将MainWindow实例作为参数提供给MainWindow实例:

Utils