我将尝试通过想象以下示例来简化我正在处理的任务:
假设我们有以下模型类层次结构:
Animal
Lion
Snake
Bird
...相应的ViewModel:
AnimalCollectionViewModel
AnimalViewModel
LionViewModel
SnakeViewModel
BirdViewModel
...以及相应的视图:
AnimalCollectionView
LionView
SnakeView
BirdView
AnimalCollection应该包含一个填充不同类型动物对象的列表,并在列表下方拥有一个属性网格用于设置所选动物的属性。显然,属性网格将具有不同的属性,并且在所选项的类型更改时应更改。
问题是:如何按照MVVM模式实现在WPF中切换属性网格?使用什么机制?
目前,在基本ViewModel中具有一个抽象枚举属性(AnimalViewModel.PropertyGridType = {Lion, Snake, Bird}),派生类通过返回相应的值来实现它。而AnimalCollectionView根据此属性的值更改属性网格用户控件。像这样:
...
<UserControl.Resources>
<Style x:Key="PropertyGridStyle" TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding PropertyGridType}" Value="Lion">
<Setter Property="Content">
<Setter.Value>
<view:LionPropertyGridView />
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding PropertyGridType}" Value="Snake">
<Setter Property="Content">
<Setter.Value>
<view:SnakePropertyGridView />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<ContentControl Style="{StaticResource PropertyGridStyle}" />
但我不确定这是否是正确的方法。(至少我不喜欢引入辅助枚举属性。是否可能根据ViewModel类型推断出必要的用户控件?)有人能给出其他选项吗? 提前感谢!