2011-04-27 74 views
3

我刚刚开始使用Caliburn Micro框架实现我的WPF应用程序(这是我第一次使用它)。我如何使用Caliburn Micro控制WPF应用程序中的窗口流程

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

在另一个词告诉我想实现那种窗流量:

闪屏 - >登录窗口 - >主窗口

我试图实现类似ShellController会派生自Conductor<IScreen>.Collection.OneActiveConductor<IScreen>,但我不知道如何在没有View for Shell的情况下执行此操作(它应该只是整个应用程序的控制器)。

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

我将非常感谢您的任何帮助或建议。

回答

8

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

事情是这样的:

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

好吧,这是我尝试去做的一种方式。感谢您的代码。 – 2011-04-27 17:34:46

3

是的,你在围绕DisplayRootView的想法中是正确的。我建议您重写该方法并在那里实现您的自定义行为。您可以直接使用IWindowManager来显示窗口。如果你的逻辑很重要,你当然可以把它抽象成一个简单的控制器,它可以编排启动事件。

+1

谢谢你对我的想法的回答和确认。顺便说一句。你的框架非常棒,为此付出了努力。 – 2011-04-27 17:34:07

0

我试图完成相同的工作流程为原来的海报,但是,当我打电话TryClose上LoginViewModel,关闭对话框,这似乎导致应用程序退出,一旦它被打开就关闭壳牌。

什么是合适的方法来关闭LoginDialog,允许应用程序按需继续?

+0

它更好的问这个 – biju 2011-04-29 12:33:24

6

为了避免应用程序退出呼吁LoginViewModel TryClose()试试这个后: 在你App.xaml中,设置ShutdownMode="OnExplicitShutdown" 和DisplayRootView结束呼叫Application.Shutdown();

+0

的新问题谢谢!谢谢!谢谢! – 2012-08-15 11:37:00

7

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

相关问题