如果有多个 DataTemplate 与 DataType 匹配,哪一个 DataTemplate 会被选中?

4

假设有以下虚拟机类继承关系

public abstract class BaseClass {}
public class SubClass : BaseClass {}
public class OtherSubClass : BaseClass {}

我希望使用ContentPresenter根据DataContext的类型选择DataTemplate。它应该为SubClass选择一个模板,为BaseClass的所有其他子类选择另一个模板。我使用以下实现:
<ContentPresenter>
  <ContentPresenter.Resources>
    <DataTemplate DataType="{x:Type BaseClass}">
    ...
    </DataTemplate>
    <DataTemplate DataType="{x:Type SubClass}">
    ...
    </DataTemplate>
  </ContentPresenter.Resources>
</ContentPresenter>

这个实现是可行的,但我不确定它有多么防错。根据 DataType 选择 DataTemplate 的规则是什么?我搜了很多,但找不到答案。我可以想象使用最特定匹配类型的数据模板,但如果有证据支持这一点,我会感觉更好(而且与 DataTemplates 的顺序或 WPF 的心情无关)。
1个回答

2
根据FrameworkElement.FindTemplateResourceInternal的源代码,WPF将通过回溯数据项的继承来搜索DataTemplate资源。如下图所示: enter image description here 最初的回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接