wpf - 如果多个匹配,则根据 DataType 选择哪个 DataTemplate

标签 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 的心情等其他内容无关)。

最佳答案

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

enter image description here

关于wpf - 如果多个匹配,则根据 DataType 选择哪个 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55365795/

相关文章:

wpf - 更改 StackPanel 中的可见性

wpf - 如何从可编辑的 ComboBox 获取 TextChanged 事件

wpf - 动态绑定(bind)菜单

c# - 将事件绑定(bind)到方法,为什么在UWP中有效?

wpf - 是否有一种通用方法可以将鼠标下方的 ItemContainer 的 DataContext 设置为其他控件的属性?

wpf - CheckBox 的默认控制模板

.net - 如何将组合框大小设置为其内容的最大宽度?

添加时 C# datagrid 不会更新 itemsource

c# - 在 XAML/Xamarin 中交换 ListView 网格(两个网格版本,单个代码隐藏)

c# - XAML - 通过字符串路径显示图像