Dealing with DataTemplates

本文关键字:DataTemplates with Dealing | 更新日期: 2023-09-27 18:15:25

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

例如:

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

Dealing with DataTemplates

几个选项:

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

  2. 定义一个自定义DataTemplateSelector来消除可能匹配之间的歧义。这有点难看,因为你不再有神奇的"找到默认值"的行为。

  3. 只允许其中一个模板为"默认"。

  4. 其他模板必须由需要它们的特定视图通过Key引用。

最灵活的解决方案是使用DataTemplateSelector,让您以编程方式选择使用哪个模板,基于您想要的任何条件。

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