Wpf 将多个数据模板应用于单个数据类型的层次结构

Wpf 将多个数据模板应用于单个数据类型的层次结构,wpf,Wpf,我见过一些关于这个问题的典故,但我还没有找到一个具体的答案 假设我有模型ObjectA和ObjectB,它们继承自BaseObject,并具有相应的ViewModel、ObjectAViewModel和ObjectBViewModel。每个都是存储在ResourceDictionary中的DataTemplate的数据类型,表示它们通常在视图中的显示方式 但是,在某些情况下,基于视图的设计,我希望对存储在另一个ResourceDictionary中的ObjectA使用不同的DataTemplat

我见过一些关于这个问题的典故,但我还没有找到一个具体的答案

假设我有模型ObjectA和ObjectB,它们继承自BaseObject,并具有相应的ViewModel、ObjectAViewModel和ObjectBViewModel。每个都是存储在ResourceDictionary中的DataTemplate的数据类型,表示它们通常在视图中的显示方式

但是,在某些情况下,基于视图的设计,我希望对存储在另一个ResourceDictionary中的ObjectA使用不同的DataTemplate,但仍然对ObjectB使用相同的DataTemplate。这就是资源字典的顺序很重要的情况吗

我正在将一个旧项目重构为WPF,距离构建程序的这一部分还有一两天的时间。所以,我会在几天后自己想出一个答案,但如果有人更早发现,我想我不是唯一一个对此感到疑惑的人。下面是我头脑中关于如何工作的结构

class BaseObject { }

class ObjectA : BaseObject { }
class ObjectB : BaseObject { }

class BaseObjectCollection : ICollection<BaseObject> { ObjectA; ObjectB; }

class ObjectAViewModel { }
class ObjectBViewModel { }

<!-- Main Resources File -->
<ResourceDictionary>
    <DataTemplate DataType="{x:Type ObjectAViewModel}" />
    <DataTemplate DataType="{x:Type ObjectBViewModel}" />
</ResourceDictionary>

<!-- Displays ObjectA, ObjectB using above Main Resource File DataTemplates -->
<Window x:Name="ViewA">
    <Window.Resources>
        <...code for grabbing Main Resources File... />
    </Window.Resources>

    <ItemsControl ItemsSource="_baseObjectCollection" />
</Window>

<!-- Second Resource File -->
<ResourceDictionary>
    <DataTemplate DataType="{x:Type ObjectAViewModel}" />
</ResourceDictionary>

<!-- What happens here? -->
<Window x:Name="ViewB">
    <Window.Resources>
        <...code for grabbing Main Resource File... />
        <...code for grabbing Second Resource File... />
    </Window.Resources>

    <ItemsControl ItemsSource="_baseObjectCollection" />
</Window>
classbaseobject{}
类ObjectA:BaseObject{}
类ObjectB:BaseObject{}
类BaseObjectCollection:ICollection{ObjectA;ObjectB;}
类ObjectAViewModel{}
类ObjectBViewModel{}
是的,我可以使用x:Key和TemplateSelector,但我更喜欢使用自动选择过程


谢谢。

你为什么不试试看呢?如果你能稍微澄清一下你的问题就好了。现在还不清楚你想在这里实现什么,你目前的结果是什么,它与预期的结果有什么不同。我正朝着这个方向努力,但我目前正在重新设计模型的结构,暂时不会达到这个目的。基本上,在这个示例中,我尝试将两个数据模板应用于同一个ViewModel,后一个覆盖前一个。(比如说,一个有标签、文本块和按钮仅用于显示,另一个有标签、组合框和按钮用于编辑。)如果我采用这种策略,我会得到预期的结果吗?(@HighCore,上次你回答我的问题时,你让我删除所有内容,所以我尽量避免。哈哈)