2010-05-21 27 views
4

當我把頭繞在mvvm上時,視圖是視圖,視圖模型是'視圖的模態',模型是我們正在處理的實體(或者至少這是我的理解)。但我不清楚什麼時候以及什麼時候模型實體被填充。例如:MVVM其中加載數據的代碼屬於哪裏?

可以說我有需要在數據庫中創建新記錄的應用程序。該記錄應該有默認值開始。誰負責新記錄,並獲取默認值。這與MVVM有什麼關係,還是數據訪問層的一部分?誰調用了視圖模型?

或者對於現有記錄何時\在哪裏檢索到記錄?如果修改則保存?

感謝

回答

0

我使用視圖模型來控制加載(使用默認值)和保存我的模型,並創建集合和對象,我使用綁定到我的意見。這包括在我的模型上設置默認值。

0

您的視圖的狀態和行爲在您的視圖模式中定義,這意味着所有事件都在此處聲明。

誰調用了viewmodel? 這取決於誰需要它。你可以在你看來稱它。

對於現有記錄何時\在哪裏檢索到記錄?如果修改則保存? 保存和檢索部分是在您的viewmodel。

有關詳細說明,請訪問site

4

在一個過分簡化的答案中,您的ViewModel應該包含LOGIC,用於控制View顯示的內容以及如何允許它與模型或數據進行交互。

通過Command機制攔截事件,如獲取數據,保存和刪除,並將其推送到ViewModel中,並在其中進行測試。處理'髒'事件也是ViewModel的職責。至於誰調用ViewModel,則將委託調用WPF和Silverlight中提供的綁定機制。

在ViewModel中,它仍然關注最佳實踐並確保您有一個DataAccess圖層抽象您的數據源,並可能使用Repository模式來抽象。

一個視圖模型的生命週期可以像下面那樣簡單......通過查看稱爲

  1. 構造函數通過視圖模型構造函數叫
  2. GetData方法
  3. 數據接收,並被推到現有的數據綁定查看ObservableCollection屬性

但是,由於您可能在虛擬機的Ctor中包含大量移動部件,包括數據存儲庫接口喲你可能會想與IoC合作。這將使ViewModel的生命週期更接近...

  1. 查看/視圖模型(取決於如果你查看或視圖模型第一)被拉出的IoC
  2. 的IoC把手
  3. 數據倉庫被注入的視圖查看模型(基於公約)的配對視圖模型
  4. 通過視圖模型構造函數叫做GetData方法
  5. 數據接收,並被推到現有的數據綁定查看物業的ObservableCollection

這可能看起來像更多的步驟,但是對於IoC容器,您實際上只調用IoC.Get()這樣的單一方法,其餘步驟根據應用的約定自動進行連接。