【问题标题】:Which DataTemplate is selected based on DataType if multiple match如果多个匹配,则根据 DataType 选择哪个 DataTemplate
【发布时间】:2019-03-26 20:35:00
【问题描述】:

给定以下 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 的情绪等其他东西无关)。

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      相关资源
      最近更新 更多