C# 处理数据模板

C# 处理数据模板,c#,mvvm,datatemplate,C#,Mvvm,Datatemplate,是否有一些我不知道的处理数据模板的明显方法 例如: 我有一个ContentControl,它将用于显示各种应用程序视图。据我所知,对于每个控件,每个数据类型可能存在一个数据模板。(即,当ContentControl将PersonViewModel设置为其DataContext时,我可以向ResourceDictionary添加一个DataTemplate,以显示DetailsView;当ContentControl将PersonManagerViewModel设置为其DataContext时,我

是否有一些我不知道的处理数据模板的明显方法

例如:


我有一个ContentControl,它将用于显示各种应用程序视图。据我所知,对于每个控件,每个数据类型可能存在一个数据模板。(即,当ContentControl将PersonViewModel设置为其DataContext时,我可以向ResourceDictionary添加一个DataTemplate,以显示DetailsView;当ContentControl将PersonManagerViewModel设置为其DataContext时,我可以添加一个ListView)。但是,当ContentControl的DataContext设置为PersonViewModel时,我如何在DetailsView和EditView之间进行选择呢?

最灵活的解决方案是根据您想要的任何条件,使用

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

有几个选项:

  • 定义“区域”视图模型时,始终在视图模型和视图之间使用1:1映射。这是最典型的方法。如果考虑对多个视图使用相同的ViewModel,则ViewModel可能做得太多。共享逻辑可能属于两个或多个不同的ViewModel类将使用的自己的模型类

  • 定义自定义DataTemplateSelector以消除可能匹配之间的歧义。这有点难看,因为您不再具有“查找默认值”的良好魔法行为

  • 仅允许其中一个模板为“默认”。其他模板必须由需要它们的特定视图按键引用