2011-11-21 64 views
0

是否有一些明顯的方法來處理我不知道的DataTemplates?處理DataTemplates

例如:

我有將用於顯示各種應用程序視圖一個ContentControl中。據我所知,對於每個控件,每個DataType可能存在一個DataTemplate。 (即,當ContentControl將PersonViewModel設置爲其DataContext或ListView時,如果ContentControl將PersonManagerViewModel設置爲其DataContext,我可以向ResourceDictionary添加DataTemplate以顯示DetailsView。但是當ContentControl的DataContext被設置爲PersonViewModel時,我該如何在DetailsView和EditView之間進行選擇?

回答

1

有幾個選項:

  1. 在定義「區」的視圖模型,總是用一個1:一個視圖模型和視圖之間1地圖。這是最典型的方法。如果您正在考慮對多個視圖使用相同的ViewModel,ViewModel可能會做得太多。共享邏輯可能屬於它自己的Model類,兩個或多個不同的ViewModel類將使用該類。

  2. 定義自定義的DataTemplateSelector以在可能的匹配之間消除歧義。這有點醜陋,因爲你不再有「找到默認」行爲。

  3. 只允許其中一個模板成爲'默認'。其他模板必須由Key通過需要它們的特定視圖來引用。

1

最靈活的解決方案是使用DataTemplateSelector讓你programmatically choose根據你想要的任何條件使用哪個模板。

我們在少數地方使用的另一種替代方法是簡單地使用多個ViewModel;在你的情況下,你可以有一個ReadOnlyPersonViewModel爲DetailsView和一個MutablePersonViewModel爲EditView。