c# - 注销并返回 Prism 应用程序中的登录屏幕
问题描述
我有一个登录序列在我的基于 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 个屏幕,一旦引导程序完成它就会被初始化,或者让引导程序响应来自 MainWindow 或其他东西的事件。
实现这一目标的最佳方法是什么?
解决方案
几乎感觉我需要某种窗口管理器来显示和隐藏 2 个屏幕
默认行为是显示一个 shell,基本上一切都在那里发生。如果您想要多个“外壳”(例如登录窗口和常规外壳),您必须扩展代码。调用 from 的窗口管理器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();
}
窗口管理器创建并保存登录窗口和外壳,并显示一个并隐藏另一个。我会尽量不破坏和重新创建外壳,以防止混淆区域管理器之类的东西。
推荐阅读
- replace - 使用 CoreLocation 获取城市信息
- javascript - 将多个数组中的值存储到一个数组中(JavaScript/Reactjs)
- javascript - google play 控制台中的 angular-sanitize 和 angular-cookies CVE 警告
- c# - 在动态加载的程序集中嵌入调试信息
- docker - WSO2 Docker 容器文本编辑器
- azure - 在 Azure Blob 更新上触发 Jenkins 构建
- python - Pandas groupby,包含和求和
- llvm - 尝试使用 llvm-cov 查看代码覆盖率
- java - 为什么通配符类型参数不在自引用类型的包装器范围内
- javascript - 您如何混淆代码以减少篡改和/或盗窃?