在我的情況下,我有很多視圖(用戶控件),作爲它的一部分包含一些過濾器選項。舉例來說,總共有10個過濾器選項,但並非所有視圖都顯示全部10個過濾器選項。其中一些僅顯示3個,其中一些8個等。重要的是,當在一個視圖上設置了一個過濾器選項時,包含此過濾器選項的所有視圖都應具有相同的值。MVVM設計 - 處理常見ViewModel幾個視圖
AView: filterOption1, FilterOption2, FilterOption3
BView: filterOption1, FilterOption3, FilterOption5
CView: filterOption2, FilterOption4, FilterOption6, FilterOption7
當用戶集上AView filterOption1 =真,相同的值應該在使用filterOption1(前BView)的所有視圖中設置。這導致我決定擁有一個CommonViewModel(單例),它將包含公共(共享)數據,並且將公開其中的所有過濾器選項,並且所有視圖都應該綁定到此CommonViewModel。
爲了顯示特定視圖過濾器選項,我能想到的兩種方法:
1)設計ONE CommonView,對於每個表示創建新的實例,並隱藏其中不需要
<DataTemplate DataType="vm:CommonViewModel">
<vw:CommonView ShowFilterOption1="True" ShowFilterOption3="True" />
</DataTemplate>
過濾器選項
2)設計爲每個不同的表示單獨的視圖(不同的濾波器選項)
你怎麼看待這些方法,你更喜歡哪一個是什麼,你有沒有一些其他的想法,什麼是最好的町冰是否遵循適當的MVVM設計?結合一個視圖模型,一次在視圖模型的屬性
有一個CommonView可能產生的複雜性是如何佈置過濾器選項。正如我所說的,在20個視圖中使用了7-8個過濾器選項,但並非所有過濾器選項都用於所有視圖。這意味着我需要在代碼中進行一些複雜的佈局處理,因爲我需要有一些類似於fitler選項的網格,其中行/列將被動態設置。 – Goran 2013-03-24 11:55:13
是的,如果我們可以將東西拖到一起,我的朋友編程就會變得很有趣..但它不是這種情況,所以在您的示例中,您將需要一個堆棧面板或網格並在運行時添加uielements ..您還需要隱藏你的filteroptions,並在需要時顯示它們。那就是爲你的一個視圖編寫邏輯的一部分 – 2013-03-24 12:02:32
我的朋友,我沒有從編寫代碼開始,這是最簡單的部分。你能寫一些關於這兩種方法的缺點,因爲從你寫的內容來看,我沒有得到任何關於爲什麼的信息,你說的大部分內容都是我應該如何實現我命名的方法,這不是我的問題。我現在做出的決定將對應用程序產生重大影響,因爲將有30多個應用程序受其影響,所以我需要100%確定最佳方法。 – Goran 2013-03-24 12:38:00