當我把頭繞在mvvm上時,視圖是視圖,視圖模型是'視圖的模態',模型是我們正在處理的實體(或者至少這是我的理解)。但我不清楚什麼時候以及什麼時候模型實體被填充。例如:MVVM其中加載數據的代碼屬於哪裏?
可以說我有需要在數據庫中創建新記錄的應用程序。該記錄應該有默認值開始。誰負責新記錄,並獲取默認值。這與MVVM有什麼關係,還是數據訪問層的一部分?誰調用了視圖模型?
或者對於現有記錄何時\在哪裏檢索到記錄?如果修改則保存?
感謝
當我把頭繞在mvvm上時,視圖是視圖,視圖模型是'視圖的模態',模型是我們正在處理的實體(或者至少這是我的理解)。但我不清楚什麼時候以及什麼時候模型實體被填充。例如:MVVM其中加載數據的代碼屬於哪裏?
可以說我有需要在數據庫中創建新記錄的應用程序。該記錄應該有默認值開始。誰負責新記錄,並獲取默認值。這與MVVM有什麼關係,還是數據訪問層的一部分?誰調用了視圖模型?
或者對於現有記錄何時\在哪裏檢索到記錄?如果修改則保存?
感謝
我使用視圖模型來控制加載(使用默認值)和保存我的模型,並創建集合和對象,我使用綁定到我的意見。這包括在我的模型上設置默認值。
您的視圖的狀態和行爲在您的視圖模式中定義,這意味着所有事件都在此處聲明。
誰調用了viewmodel? 這取決於誰需要它。你可以在你看來稱它。
對於現有記錄何時\在哪裏檢索到記錄?如果修改則保存? 保存和檢索部分是在您的viewmodel。
有關詳細說明,請訪問site。
在一個過分簡化的答案中,您的ViewModel應該包含LOGIC,用於控制View顯示的內容以及如何允許它與模型或數據進行交互。
通過Command機制攔截事件,如獲取數據,保存和刪除,並將其推送到ViewModel中,並在其中進行測試。處理'髒'事件也是ViewModel的職責。至於誰調用ViewModel,則將委託調用WPF和Silverlight中提供的綁定機制。
在ViewModel中,它仍然關注最佳實踐並確保您有一個DataAccess圖層抽象您的數據源,並可能使用Repository模式來抽象。
一個視圖模型的生命週期可以像下面那樣簡單......通過查看稱爲
但是,由於您可能在虛擬機的Ctor中包含大量移動部件,包括數據存儲庫接口喲你可能會想與IoC合作。這將使ViewModel的生命週期更接近...
這可能看起來像更多的步驟,但是對於IoC容器,您實際上只調用IoC.Get()這樣的單一方法,其餘步驟根據應用的約定自動進行連接。