我使用了this回答中提供的解决方案,以便根据我的复合集合中的类型使用两种不同的视图模型。
视图的摘录如下:
<ItemsControl ItemsSource="{Binding DecksAndCards}" >
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type viewModel:DeckViewModel}">
<view:DeckView />
</DataTemplate>
<DataTemplate DataType="{x:Type viewModel:CardViewModel}">
<view:CardView />
</DataTemplate>
</ItemsControl.Resources>
...
视图位于仅引用View
项目的ViewModel
项目中。
但是通过使用x:Type
(我认为它充当静态引用),我需要向我的视图项目添加对我的DomainLayer项目的引用,因为ViewModel项目也引用它。
如果我不添加此引用,则会收到错误消息:
Unknown build error, 'Cannot resolve dependency to assembly 'DomainLayer, [...] because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.
遵循MVVM模式,View不应直接引用模型。所以我的问题是,是否有另一种解决方案,而不是我上面发布的解决方案,或者在这种情况下是否需要打破模式?