在新窗口提示密码
本文关键字:提示 密码 窗口 新窗口 | 更新日期: 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
}
}