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

时间:2014-03-25 18:00:34

标签: wpf

我已经看到围绕这个问题的一些暗示,但我还没有找到具体的答案。

假设我有从BaseObject继承并具有相应ViewModels,ObjectAViewModel和ObjectBViewModel的模型ObjectA和ObjectB。每个都是DataTemplate的DataType,它存储在ResourceDictionary中,表示它们通常在View中的显示方式。

但是,在某些情况下,基于View的设计,我想使用另一个DataTemplate for ObjectA存储在另一个ResourceDictionary中,但仍然使用相同的DataTemplate for ObjectB。这是资源词典顺序重要的情况吗?

我正在将旧项目重构为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>

是的,我可以使用x:Key和TemplateSelector,但我更喜欢使用自动选择过程。

感谢。

0 个答案:

没有答案