2010-09-25 126 views
2

我正在編寫我的第一個「真正的」MVVM應用程序,用戶需要採取的第一步是提供登錄憑據。在過去,我將在主窗口已經佈置並首次可見之後顯示登錄對話框。MVVM和登錄窗口

在MVVM世界中這樣做的首選方式是什麼?爲什麼?

我看到很多選項,其中之一就是繼續按照之前的方式進行操作,因爲這是一次性操作,不會干擾其他「MVVM-ness」應用。一旦用戶登錄,我可以用他們的憑據初始化MainWindow的ModelView,然後繼續我的方式。另一種選擇是讓ModelView導致登錄對話框(以某種方式)顯示。 MVVM大師更喜歡這些嗎?

(還有一個選項,它首先顯示登錄對話框,然後當它被解散時,創建主窗口。這在技術上解決了我的困境,但它並不真正教育我,也不就像有一個「裸體」登錄對話框的美學)

+0

我的答案在http://stackoverflow.com/questions/3791677/mvvm-foundation-how-to-close-application-window-from-viewmodel/3793937#3793937可能會有所幫助。 – 2010-09-25 22:12:45

回答

2

Model-View-ViewModel Pattern沒有告訴我們如何定義UI工作流。我們可以自由選擇合適的工作流程。我更喜歡你的第一種方法,因爲它實現簡單而直接。工作流程:

  1. 顯示空的主窗口
  2. 顯示登錄對話框
  3. 初始化主窗口與用戶憑據

將是一個控制器(例如ApplicationController中)的責任。這可能如何看起來如ViewModelWPF Application Framework (WAF)的示例應用程序中所示。

0

我認爲最好的(清潔,可測試...)選項應該是ViewModels啓動對話框顯示,因爲邏輯應該屬於VM而不是視圖...這個'show-up'通常通過創建類似於DialogService的應用來實現 - 爲您的模式窗口創建一個抽象(例如通過創建一個具有類似方法的接口ShowDialog()和一個屬性DialogResult,也許更多 - 這取決於你的具體需求),你的對話實現;然後創建對抽象對話框有依賴性的DialogService,並在此服務中調用ShowDialog,檢查DialogResult的值等;在你的虛擬機中,你只會使用這個對話服務,而沒有參考一些與視圖有關的東西......我不會詳細討論,因爲在虛擬機中顯示/使用模態對話框時有一些實現,基於這個(和更多)...選擇這種方法也可以讓你的UI框架平臺獨立。 HTH。