3

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

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

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

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

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

我的另一个想法是覆盖DisplayRootViewAppBootstrapper 中的方法并IWindowManager用于显示窗口。这是好方法吗?

对于任何帮助或建议,我将不胜感激。

4

5 回答 5

8

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

像这样的东西:

var windowManager = IoC.Get<IWindowManager>();
windowManger.ShowDialog(IoC.Get<SplashScreenViewModel>());
if(windowManger.ShowDialog(IoC.Get<LoginViewModel>()))
{
   windowManger.ShowWindow(IoC.Get<ShellViewModel>());
}
于 2011-04-27T17:11:28.350 回答
7

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

于 2011-07-07T15:03:24.273 回答
6

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

于 2011-05-25T08:40:50.823 回答
3

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

于 2011-04-27T17:11:04.313 回答
0

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

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

于 2011-04-29T06:22:32.643 回答