我已经看到围绕这个问题的一些暗示,但我还没有找到具体的答案。
假设我有从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,但我更喜欢使用自动选择过程。
感谢。