在新窗口提示密码

本文关键字:提示 密码 窗口 新窗口 | 更新日期: 2023-09-27 18:16:08

在WPF中,我创建了一个单独的窗口来包含启动时将显示的密码提示符。主窗口需要被禁用,只有在输入正确的密码后才会运行。我已经为我的mainwindow . example .cs做了以下操作:

public MainWindow()
{
   InitializeComponent();
   this.view_model = new MainViewModel();
   this.DataContext = view_model;
   LoginWindow login_window = new LoginWindow();
   login_window.ShowDialog();
}

在LoginWindow中,输入密码,登录逻辑保持在Button click中:

private void button_Login_Click(object sender, RoutedEventArgs e)
{
   Tuple<bool, string> result = view_model.Login(this.textbox_password.Password);
   if (result.Item1 == true)
   {
      // Login successful
   }
   else
   {
      MessageBox.Show(result.Item2, "Failed", MessageBoxButton.OK, MessageBoxImage.Error);
   }
}

我现在的问题是,我如何通知MainWindowViewModel,它可以继续与应用程序的其余部分?有更好的方法吗?

在新窗口提示密码

一种方法是挂钩到MainWindow Initialized事件,在主窗口之前打开一个登录窗口。

    private void MainWindow_Initialized(object sender, EventArgs e)
    {
        /*** Start Login ***/
        new LoginWindow(this).ShowDialog();
    }

然后在登录窗口调用一个登录方法,这里是AttemptLogin

    private void loginButton_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            //Disable login button to avoid multiple login attempts
            loginButton.IsEnabled = false;
            m_mainform.AttemptLogin(UNtextBox.Text, PWpasswordBox.Password, otherID1, otherID2, this);
        }
        catch (Exception Ex)
        {
            loginButton.IsEnabled = true;
            //Login Error - Report error
        }
    }

则只有当验证了尝试登录回调时才允许调用主方法

    private void LoginCheck(API.LoginResp resp, CustomAsyncStateContainer state)
    {
        try
        {
            //Process response
            if (resp.header.errorCode != APIErrorEnum.OK)
            {
                //Login Failed - Show error if login failed
                if (loginForm == null)
                    new LoginWindow(this).ShowDialog();
                else
                {
                    loginForm.Activate();
                    loginForm.loginButtonEnabled = true;
                    loginForm.PWpasswordBox.Password = null;
                }
            }
            else
            {
                if (loginForm != null)
                {
                    loginForm.Close();
                    //Continue with Main App
                }
            }
        }
        catch (Exception ex)
        {
              //Log error
        }
    }