【问题标题】:How can I control flow of windows in WPF application using Caliburn Micro如何使用 Caliburn Micro 控制 WPF 应用程序中的窗口流
【发布时间】:2011-08-13 18:09:49
【问题描述】:

我刚刚开始使用 Caliburn Micro 框架实现我的 WPF 应用程序(这是我第一次使用它)。

我已经配置了AppBootstrapper 类并且一切正常(显示了我的主窗口),但现在我想实现我的应用程序的更复杂的行为。一开始我只想显示一个启动画面(它会从服务中加载一些数据)。之后我只想显示一个 LogIn 窗口,如果用户登录系统,我的 Main 窗口应该会显示出来。

换句话来说我想实现那种窗口流:

启动画面 -> 登录窗口 -> 主窗口

我试图实现类似ShellController 的东西,它会派生自Conductor<IScreen>.Collection.OneActiveConductor<IScreen>,但我不知道如何在没有 View for Shell 的情况下做到这一点(它应该只是整个应用程序)。

我的另一个想法是在 AppBootstrapper 中覆盖 DisplayRootView 方法,并使用 IWindowManager 来显示窗口。这是好方法吗?

如果您有任何帮助或建议,我将不胜感激。

【问题讨论】:

    标签: wpf mvvm caliburn.micro


    【解决方案1】:

    是覆盖 DisplayRootView 并使用 IWindowManager 来显示不同的屏幕/视图模型。

    类似这样的:

    var windowManager = IoC.Get<IWindowManager>();
    windowManger.ShowDialog(IoC.Get<SplashScreenViewModel>());
    if(windowManger.ShowDialog(IoC.Get<LoginViewModel>()))
    {
       windowManger.ShowWindow(IoC.Get<ShellViewModel>());
    }
    

    【讨论】:

    • 好的,这是我尝试过的一种方式。谢谢你的代码。
    【解决方案2】:

    在 Caliburn Micro v1.1 中,DisplayRootViewFor() 方法已更改为静态。现在推荐的方法是覆盖 Bootstrapper 中的 OnStartup() 方法以显示所需的启动屏幕或登录屏幕。

    【讨论】:

      【解决方案3】:

      为避免在 LoginViewModel 上调用 TryClose() 后应用程序退出,请尝试以下操作: 在您的 App.xaml 中,设置 ShutdownMode="OnExplicitShutdown" 并在 DisplayRootView 的末尾调用 Application.Shutdown();

      【讨论】:

      • 谢谢!谢谢!谢谢!
      【解决方案4】:

      是的,您对 DisplayRootView 的看法是正确的。我建议您覆盖该方法并在那里实现您的自定义行为。您可以直接使用 IWindowManager 来显示窗口。如果您的逻辑很重要,您可能当然希望将其抽象为一个可以编排启动事件的简单控制器。

      【讨论】:

      • 感谢您对我的想法的回答和确认。顺便提一句。您的框架很棒,感谢您的努力。
      【解决方案5】:

      我正在尝试完成与原始海报相同的工作流程,但是,当我在 LoginViewModel 上调用 TryClose 以关闭对话框时,这似乎会导致应用程序退出,并在打开 Shell 后立即关闭它。

      关闭 LoginDialog 以允许应用程序按需要继续运行的适当方法是什么?

      【讨论】:

      • 最好就此提出一个新问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多