注销并返回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。

几乎感觉就像我需要某种窗口管理器来显示和隐藏两个屏幕,一旦引导程序完成操作,或者让引导程序响应MainWindow之类的事件,该屏幕就会被初始化。

实现此目标的最佳方法是什么?

g455484794 回答:注销并返回Prism应用程序中的“登录”屏幕

  

几乎感觉到我需要某种Window Manager来显示和隐藏2个屏幕

默认行为是显示一个外壳,基本上所有事情都发生在该外壳上。如果您需要多个“外壳”(例如登录窗口和常规外壳),则必须扩展代码。从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();
}

窗口管理器创建并保存登录窗口和外壳程序,并显示其中一个并隐藏另一个。我尽量不要破坏并重新创建外壳程序,以免混淆区域管理器之类的东西。

本文链接:https://www.f2er.com/3125487.html

大家都在问