处理DataTemplates

时间:2011-11-21 22:30:20

标签: c# mvvm datatemplate

是否有一些明显的方法来处理我不知道的DataTemplates?

例如:

我有一个ContentControl,用于显示各种应用程序视图。据我所知,对于每个控件,每个DataType可能存在一个DataTemplate。 (即,当ContentControl将PersonViewModel设置为DataContext时,或者当ContentControl将PersonManagerViewModel设置为DataContext时,我可以将DataTemplate添加到ResourceDictionary以显示DetailsView。但是,当ContentControl的DataContext设置为PersonViewModel时,我如何在DetailsView和EditView之间进行选择?

2 个答案:

答案 0 :(得分:1)

最灵活的解决方案是使用DataTemplateSelector让您programmatically choose根据您想要的条件使用哪个模板。

我们在一些地方使用的另一种选择是简单地使用多个ViewModel;在您的情况下,您可以为DetailsView提供ReadOnlyPersonViewModel,为EditView提供MutablePersonViewModel。

答案 1 :(得分:1)

一些选择:

  1. 定义“区域”视图模型时,请始终在ViewModel和View之间使用1:1地图。这是最典型的方法。如果你想为多个视图使用相同的ViewModel,那么ViewModel很可能做得太多了。共享逻辑可能属于它自己的Model类,两个或多个不同的ViewModel类将使用它。

  2. 定义自定义DataTemplateSelector以消除可能匹配项之间的歧义。这有点丑陋,因为你不再拥有漂亮的魔法'找到默认'行为。

  3. 仅允许其中一个模板为“默认”。其他模板必须由Key通过需要它们的特定视图引用。