有些東西一直困擾着我關於MVVM的內容 - 如果我使用視圖優先的方法來構建我的對象(這看起來是最常見的方法,至少在閱讀和搜索之後),我該如何獲得上下文信息輸入到視圖模型中?初始化視圖模型
我見過很多類似問題的答案,都說「使用DI容器注入模型」,但這並不能幫助我,所以我將提供一個小例子。
假設我的應用程序是PeopleEditor。它用於加載和編輯複雜的People對象。當你加載應用程序時,你會得到一個主屏幕,將一羣人加載到內存中 - 比方說,這些都可以通過我可以從我的容器中獲得的集合訪問。通過點擊一個人,你會被帶到編輯器屏幕。編輯器很複雜,所以這不是在一個屏幕中實現的簡單的主細節視圖。
所以,在主屏幕上,當我點擊一個人時,應用程序需要創建一個新的視圖和視圖模型並顯示視圖。如果我首先通過容器創建視圖模型,我可以用適當的人物對象初始化它。 這對我來說似乎很自然,所以我很難弄清爲什麼視圖優先似乎是主要模式。如何使用視圖優先方法來做到這一點?該視圖將創建視圖模型,該視圖模型可以獲取People的集合,但不知道其編輯的是哪個人。編輯清晰度:多人編輯可以同時存在,每編輯一個不同的人。
Prism 4.0 alpha的MVVM參考實現使用「狀態處理程序」,它基本上是應用程序用來在容器中存儲構造函數參數的服務。它保存狀態並調用ShowView,並且最終創建的視圖模型會導入一個狀態對象。這對我來說看起來很笨拙 - 就像它試圖假裝它真的不是那麼鬆散耦合。其他人是否有其他指導?
爲什麼你不想當你說的更自然地你使用視圖模型第一種方法? marlon grech表示,視圖或視圖模型首先是個人偏好的選擇(視圖首先更容易與混合使用)。我也這麼認爲,我使用最適合我的場景的方法。所以我在我的應用程序中混淆了兩者,這取決於我想要做什麼。 – blindmeis 2010-09-01 06:36:43
有趣的問題。我總是問自己關於視圖優先方法的相同問題......視圖模型 - 首先看起來更加自然,所以這就是我始終使用的方法 – 2010-09-01 08:16:50
@blindmeis:謝謝你的迴應。這並不是說我不想首先使用viewmodel--事實上,這就是我現在的應用程序的結構 - 只是我很好奇如何以視圖優先的方式來完成它。我在應用程序中試圖實現的東西對我來說看起來相當普遍,而viewmodel-首先看起來很自然,答案是我無法弄清楚爲什麼更多更好地選擇「viewmodel composition」或「viewmodel-first」。 – nlawalker 2010-09-01 14:20:02