如何使用Caliburn Micro控制WPF应用程序中的窗口流量

Raf*_*jer 3 wpf mvvm caliburn.micro

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

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

用另一个词说话我想实现那种窗口流程:

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

我试图实现类似的东西ShellController会从派生Conductor<IScreen>.Collection.OneActive或者Conductor<IScreen>,但我不知道该怎么做没有信息查看壳牌(它应该是唯一为整个应用程序控制器).

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

如果有任何帮助或建议,我将非常感激.

luk*_*ler 8

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

像这样的东西:

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


小智 7

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


小智 6

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