2012-04-23 60 views
0

有關導航窗格(如Outlook使用的導航窗格)的簡單問題。在MVVM中,誰負責顯示其他視圖,ViewModel或View?

在MVVM中,負責顯示其他視圖的ViewModel或View?

當View事件可以處理調用其他視圖時,將該代碼放入ViewModel似乎很愚蠢。 ViewModel根據需要啓用/禁用並顯示/隱藏導航項目。

回答

1

ViewModel負責視圖狀態。如果用戶執行的任何操作恰好修改了視圖狀態,那麼該操作的代碼就屬於視圖模型。

因爲數據綁定,我喜歡MVVM模式,但我喜歡數據綁定,因爲它允許我以易於單元測試大部分代碼的方式構造我的代碼。該結構的一大部分是將視圖狀態置於一組類中,並將狀態置於另一組中。

我認爲人們試圖實現MVVM的很多次,他們真的只是爲了數據綁定的目的而實現模型 - 視圖關係。這很好,因爲如果他們沒有提供明確的好處,就沒有理由保持抽象。

所以,你的問題的答案是你想用你的視圖模型實現什麼?

數據綁定?把代碼放在任何你喜歡它的地方。

可測性?提供關注點分離的抽象?一個純粹的免費查看行李的模型?

然後把它放在視圖模型中。

+0

我繼承了一個有三個組的導航控件。每個組都有不同的做法。一個是混亂的,既有觀點又有觀點 - 模型相互纏繞,一堆蠕蟲。一個沒有視圖模型,另一個沒有視圖模型。我想要數據綁定,但「混亂」太糟糕了。可測試性不是目標。在這一點上,我只是想創造一種一致性。 – AMissico 2012-04-24 03:06:51

+0

從你的第一段看來,View是負責任的。如果我有「Outlook」導航,那麼沒有視圖狀態。 – AMissico 2012-04-24 03:09:54

+0

@AMissico - 我不確定什麼是「Outlook」導航的含義,但是如果用戶點擊某些內容並關閉應用程序並重新打開它,並且看起來不完全一樣,那麼您就有了查看狀態。如果你想測試這個動作......你有查看狀態。 – 2012-04-24 03:24:57

1

我傾向於對每個View有一個ViewModel,可能甚至還有一個模型。如果你的信息傳遞給其他視圖,那麼你真的需要通過ViewModel來做到這一點,如果不是的話,那麼你可以通過使用視圖來導航。希望這有助於:)

+1

現在,如果想要可Outlook類型的感覺,你可以使用一個選項卡控件,然後可以在一個視圖模型下完成。 – TMan 2012-04-23 23:54:45

0

您正在談論使用MVVM進行導航。

我發現它非常有用,在看這個video

這裏約時間23:00解釋的方法如何讓優雅與導航MVVM

希望這有助於