2011-04-27 72 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()方法以顯示所需的啓動或登錄屏幕。

相關問題