我有一个登录序列在基于 prism 的 WPF 应用程序中工作,该应用程序在显示主窗口之前显示登录屏幕。在我的 Bootstrapper 类中,InitializeShell 方法如下所示
protected override void InitializeShell()
{
var logon = new LogOnView();
bool? res = logon.ShowDialog();
if (!res ?? true)
{
Application.Current.Shutdown(1);
}
else
{
Application.Current.MainWindow.Show();
}
}
这按预期工作,如果用户登录、使用该应用程序然后将其关闭,那就没问题了。
我现在想做的是允许用户注销,或者务实地强制注销。
如果我在 MainWindowViewModel 中使用与上述类似的代码来尝试终止 MainWindow 并显示不起作用的 LogOnView。
感觉就像我需要某种窗口管理器来显示和隐藏两个屏幕,一旦引导程序完成它的工作,或者让引导程序响应来自主窗口或其他事件的事件,就会初始化这两个屏幕。
实现这一目标的最佳方法是什么?
感觉就像我需要某种窗口管理器来显示和隐藏 2 个屏幕
默认行为是显示一个 shell,基本上所有事情都发生在那里。如果您想要多个“shell”(例如登录窗口和常规 shell),则必须扩展代码。从
InitializeShell
调用的窗口管理器对我来说听起来不错。
// in the bootstrapper
protected override void InitializeShell()
{
Container.Resolve<IWindowManager>().SwitchToLoginWindow();
}
// from the login window
private void OnCredentialsValidated()
{
_windowManager.SwitchToShell();
}
// somewhere else
private void OnLogOut()
{
_windowManager.SwitchToLoginWindow();
}
窗口管理器创建并保存登录窗口和外壳,并显示一个并隐藏另一个。我会尽量不破坏并重新创建 shell,以防止诸如区域管理器之类的令人困惑的事情。
您能否展示一下您是如何实现 IWindowManager 的?我有点被困在那里