WPF MVVM:选择动态选择 UserControl 以根据其类型显示 object 的方法
WPF MVVM: Approach to chose for dynamic selection of UserControl to display object acording to its type
在我的应用程序中,我需要管理 (CRUD) 主题和关于这个主题的不同活动的 collection,由不同的 classes 代表,他们是直接的或间接的 children 常见 activity class.
对于这个主题,我想创建 ViewModel,它还包含活动 ViewModel 的集合。
例如,高级包裹跟踪,包含有关收件人、发件人等的公共信息,以及不同的异构操作,如在 post 办公室收到(国家、代码)、冰箱发送(温度数据、时间, driver, 等), 由海关清关 (费用, 官员).
因此,为了表示这个 collection,我需要一个不同的 UI 控件(我想使用 UserControls)动态加载到视图的容器中。
我的问题是,使用 MVVM
将 activity 与其 UI 控件相关联的工业通用方法是什么?
基本上,您会为具有某种项目控制(ItemsControl
、ListView
、...)的主题设计 UI 并提供类型相关的 DataTemplate
每个具体 activity 视图模型类型。 DataTemplate
可以通过显示一些用户控件或做任何其他事情来实现。
<ItemsControl ItemsSource="{Binding Activities}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type vm:CleaningActivityViewModel}">
<uc:CleaningActivityUserControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:HappyGoLuckyActivityViewModel}">
<uc:HappyGoLuckyUserControl/>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
在此代码示例中,vm
是视图模型命名空间的 xmlns
声明,uc
是用户控件命名空间的 xmlns
声明。
这种方法对于用例相关的变化有很大的空间。 ItemsControl 可以自定义(例如设置 ItemsControl.ItemsPanel
)或由不同的项目主机替换。如果 DataType
并非在所有情况下都适用以决定正确的 UI,则 ItemsControl.ItemTemplateSelector
可能是合适的。
在我的应用程序中,我需要管理 (CRUD) 主题和关于这个主题的不同活动的 collection,由不同的 classes 代表,他们是直接的或间接的 children 常见 activity class.
对于这个主题,我想创建 ViewModel,它还包含活动 ViewModel 的集合。
例如,高级包裹跟踪,包含有关收件人、发件人等的公共信息,以及不同的异构操作,如在 post 办公室收到(国家、代码)、冰箱发送(温度数据、时间, driver, 等), 由海关清关 (费用, 官员).
因此,为了表示这个 collection,我需要一个不同的 UI 控件(我想使用 UserControls)动态加载到视图的容器中。
我的问题是,使用 MVVM
将 activity 与其 UI 控件相关联的工业通用方法是什么?基本上,您会为具有某种项目控制(ItemsControl
、ListView
、...)的主题设计 UI 并提供类型相关的 DataTemplate
每个具体 activity 视图模型类型。 DataTemplate
可以通过显示一些用户控件或做任何其他事情来实现。
<ItemsControl ItemsSource="{Binding Activities}">
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type vm:CleaningActivityViewModel}">
<uc:CleaningActivityUserControl/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:HappyGoLuckyActivityViewModel}">
<uc:HappyGoLuckyUserControl/>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
在此代码示例中,vm
是视图模型命名空间的 xmlns
声明,uc
是用户控件命名空间的 xmlns
声明。
这种方法对于用例相关的变化有很大的空间。 ItemsControl 可以自定义(例如设置 ItemsControl.ItemsPanel
)或由不同的项目主机替换。如果 DataType
并非在所有情况下都适用以决定正确的 UI,则 ItemsControl.ItemTemplateSelector
可能是合适的。