2012-03-07 31 views
1

我正在爲一個大學項目編寫一個小型的WPF應用程序,我正藉此機會學習MVVM模式。我已經實現了我的初始啓動窗口,這將是一個登錄頁面。如何從ViewModel導航?

我已經將登錄按鈕綁定到我從ICommand派生的命令,該命令使用LoginViewModel注入。然後LoginViewModel通過我創建的WCF服務驗證客戶。

我的問題是,一旦viewmodel接收到驗證是正確的通知,我應該如何從viewmodel導航到下一個頁面/窗口?我不想在viewmodel中創建一個新窗口的實例。我應該在這裏使用網頁嗎?我很想從一開始就瞭解最佳實踐,我不想浪費時間學習這樣做的壞方法。

謝謝。

回答

0

我還沒有做頁面,但對於你的登錄屏幕,我會讓我的LoginViewModel公開一個LoggedInEvent

然後,您可以讓父視圖模型創建LoginViewModel,並在LoggedInEvent被引發時再次銷燬它(並創建您需要的任何新視圖)。

1

您可以更改視圖模型並使用ContentControl將視圖模型綁定到特定視圖:在其他視圖頂部創建主視圖,該視圖將通過命令管理視圖更改(在本例中,設置CurrentViewModel從您的命令處理程序):

<UserControl.Resources> 
     <DataTemplate DataType="{x:Type vm:LoginViewModel}"> 
      <local:LoginView/> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type vm:FirstPageViewModel}"> 
      <local:FirstPageView/> 
     </DataTemplate> 
    </UserControl.Resources> 
    <ContentControl Content="{Binding Path=CurrentViewModel}" /> 

這樣,你不需要混淆的意見和的ViewModels,你不是從創建虛擬機的看法。實際上,在我的情況下,它是請求視圖隨着事件而改變的子頁面。