2011-03-09 59 views
2

我只是開始了整個WPF的事情,並且需要了解一些基本元素。我到目前爲止,我沒有在MVVM模式中發現Model,View和ViewModel。如何更改視圖+基於命令的視圖模型

我沒有得到的是在哪裏/如何去改變我的UI基於此。

可以說我有一個應用程序,我需要先登錄。我的登錄是一個視圖和我有一個viewmodel +模型。顯示這一個沒有問題,因爲它的「啓動」視圖我只是將它添加到我的窗口的構造函數中(對錯)。當用戶成功登錄後,我想將視圖和視圖模型更改爲例如。儀表板視圖+視圖模型。我應該手動完成所有這些工作,只需刪除登錄的用戶控件,然後添加其他用戶控件即儀表板?然後更改datacontext?這通常如何完成?

我擔心的是,我只是簡單地引入了很多代碼來切換view + viewmodel,這讓我有點困擾。什麼時候我從儀表板到客戶列表,然後到項目列表等我做這個邏輯在我的eventhandler /命令中按下按鈕?

回答

2
  • 認爲是UI(可能是一個窗口,網頁,用戶控件)
  • 視圖模型是後端到該視圖

你的登錄窗口將有自己的視圖模型您的儀表板將擁有自己的視圖模型。您不要手動切換視圖模型。

因此,用戶輸入他/她的用戶名和密碼並點擊回車,登錄視圖模型通過視圖中的綁定獲取數據,然後模型驗證憑據,如果他們是正確的,那麼儀表板出現哪個綁定其視圖模型。

您有一個登錄視圖和視圖模型+儀表板視圖和查看模型+其他視圖和查看其他控件的模型。

- 更新:

比方說,你具備以下條件: - 窗口 - 登錄控制 - 儀表板控制

所有有自己的看法(V)和視圖模型(VM) 的Window VM具有兩個可見性屬性,Window V中的Login和Dashboard可見性屬性綁定到它們。

當應用程序啓動時,Login控件可見,當登錄成功時,模型會通知Window VM將Login visibility屬性設置爲摺疊狀態,並將Dashboard visible屬性設置爲visible,然後Window VM會告訴Window V隱藏登錄控件並顯示儀表板控件。 「告訴」意思是引發事件,發送消息,調用方法 - 取決於你如何實現MVVM。

+0

[quote]「如果他們是正確的,那麼儀表板就會出現,它綁定到它的視圖模型。」 [/ quote] - 這個怎麼做是我試圖理解的。如何從一個視圖+視圖模型切換到另一個視圖? – 2011-03-09 21:47:17

1

創建包含用戶控件和框架的MainPageView。將MainPageView設置爲您的根視覺效果。然後,您可以將Frame Source綁定到MainPageViewModel中的一個屬性。然後,在登錄或儀表板之間進行導航就是將消息發送到MainPageViewModel並設置幀源綁定的屬性。

0

如果您希望您的視圖位於另一個窗口中,那麼您可以簡單地在每個窗口(單獨的XAML)中創建視圖/視圖模型,並通過創建新窗口,使其可見,然後退出前一個窗口。

但是,如果您想在同一個窗口中切換視圖,那麼我建議您使用自定義的ContentPresenter。我曾就此問過類似的問題,你可以在這裏找到:Resource management when changing window content

如果您只是簡單地切換可見性,那麼您將持有所有視圖的加載資源。使用自定義的ContentPresenter,您可以換出當前的內容,並且舊內容將被垃圾收集器拾取。一個命令將被髮送並由視圖模型拾取,這將改變當前視圖字段(這是視圖模型中的一個字段)。 ContentPresenter將對視圖模型的字段具有綁定,並在View Model接收到該命令時自動切換其內容。

相關問題