如果多个匹配,则根据数据类型选择哪个DataTemplate

时间:2019-03-26 20:35:01

标签: wpf xaml

给出以下VM类层次结构

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 个答案:

答案 0 :(得分:2)

根据FrameworkElement.FindTemplateResourceInternal的源代码,WPF将通过跟踪数据项的继承来搜索DataTemplate的资源。

enter image description here