我是相當新的MVVM,我有幾個問題:MVVM問題:模型的定義,包裝模型對象和模態對話框
是模型=業務層?
如果我有一個客戶模型,其中包含訂單列表和訂單,每個訂單都包含項目列表,那麼您如何將它在視圖中分開?目前,我的CustomerModel有一個CustomerViewModel。 CustomerViewModel包含OrderViewModel的列表。 OrderViewModel包含ItemsViewModel的列表。因此,如果我從數據層中檢索現有客戶,那麼我會根據現有列表創建合適的OrderViewModel和ItemViewModel。這是你通常如何實現mvvm?說實話,整個「重新包裝的對象」並不真的感覺正確。
我的customerview包含訂單和項目列表,每個訂單和項目都由其自己的用戶控件表示並重復使用ItemsControl。每個項目都有自己的添加,編輯和刪除按鈕。我想要有某種模式對話框禁用當前選項卡(而不是整個應用程序),而用戶呈現適當的形式。我找到的最簡單的解決方案是通過創建一個內容控件來創建一個控件dp(名爲Control),您可以設置它,並在isVisible = true時自動創建矩形疊加層。然後控制綁定到CustomerViewModel的dialogControl屬性....我沒有看到這是一個適當的mvvm解決方案,因爲我似乎混淆視圖與視圖模型。我認爲更正確的方法是在customerviewmodel中有一個視圖模型,它代表對話框中包含的視圖模型,併爲每個視圖模型中的視圖模型提供一個模板....但我似乎無法想出一種方法來實現矩形覆蓋此解決方案。
謝謝!
我同意你的定義以及ViewModel和Model之間的區別,但是你對在Model級別維護的屬性做什麼需要通過綁定來公開?模型層是否可以實現INotifyPropertyChanged,如果不是,您將如何獲得模型上的屬性以將視圖更改爲視圖? – ScottCher 2010-03-15 15:21:12
@ScottCher:這確實是一個架構問題。沒有辦法自動將所有更改自動引發到一個普通的舊對象,直到包裝它的ViewModel,除非您定義事件來做到這一點。在我的情況下,我使用不可變的模型對象,所以我沒有這個問題。 ;) – 2010-03-21 17:56:24