2011-09-27 145 views
0

我有一個MVVM模式的問題。所以我不確定,我已經完全理解它。在MVVMLight中設置ViewModel的DataContext

我的情景:

  • ViewModelLocator:提供所請求的視圖模型到指定的視圖。
  • LoginViewModel:視圖模型爲一個LoginView
  • MainPageViewModel:視圖模型爲MainPageView

我的示例應用程序。很簡單:用戶可以登錄並進入MainPageView。

MainPageView使用MainPageViewModel。我使用MVVMLight框架的信使從LoginView導航到MainPageView。

Messenger.Default.Register<LoginPerson>(this, Constants.NavigateLogin, 
       person => this.Window.SetContentControl(new MainPage(person))); 

我將登錄的人傳遞給視圖。 MainPage - View會將登錄的人設置爲其ViewModel(=> MainPageViewModel)。

這是正確的嗎?我不這麼認爲:-)如何在ViewModels之間進行通信?感謝您的建議。

問候,親

回答

2

當使用MVVM,你的應用程序是你的ViewModels,不是你的意見。您不應該處理任何類型的業務邏輯,例如導航或從視圖傳遞用戶對象。 View只是一個漂亮的圖層,可以讓用戶輕鬆地與ViewModel進行交互。

通常在這種情況下,我使用一個ShellViewModel其中包含CurrentPage屬性設置爲任何ViewModel是CurrentPage。我也會在ShellViewModel中存儲一個CurrentUser屬性。

您的ShellViewModel是您的啓動對象,在啓動時CurrentPage將是LoginViewModel。當用戶成功登錄時,LoginViewModel廣播LoginSuccessful消息與CurrentUser的參數,並且ShellViewModel將拾取該消息,並設置CurrentUser基於消息參數,並且將切換CurrentView到新MainPageViewModel

對於一個例子,看看我的帖子here

+0

嗨雷切爾,感謝您的答案和良好的博客文章!親愛的,親 – bitsmuggler

相關問題