【发布时间】:2021-06-23 10:28:02
【问题描述】:
在我的应用程序中,我需要管理 (CRUD) 主题和关于该主题的不同活动的集合,这些活动由不同的类表示,它们是公共活动类的直接或间接子类。
对于这个主题,我想创建 ViewModel,它还包含活动 ViewModel 的集合。
例如,像高级包裹跟踪,包含关于收件人、寄件人等的通用信息,以及不同的异构操作,如在邮局收到(国家、代码)、通过冰箱发送(温度数据、时间、司机等),海关清关(收费,官员)。
所以,为了表示这个集合,我需要将不同的 UI 控件(我认为使用 UserControls)动态加载到视图的容器中。
我的问题是关于使用 MVVM 将活动与其 UI 控件相关联的工业和常见方式是什么
【问题讨论】:
-
这就是 DataTemplates 的用途。声明 DataTemplate 资源,这些资源的 DataType 属性设置为它们应该可视化的视图模型类型。然后将特定视图模型的实例分配给 ContentControl 或将其作为 ItemsControl 的 ItemsSource 的元素,并且将自动选择适当的 DataTemplate。见Data Templating Overview。
-
您的 DataTemplates 当然可能包含您自己的 UserControls 的声明。避免显式设置 UserControls 的 DataContext 的常见错误。尽管您会在许多博客文章中找到这个“建议”,但这是错误的,因为它破坏了数据绑定在 WPF 中的工作方式。
-
谢谢你,克莱门斯。不幸的是,我看到你的答案只是评论,但它是解决方案和答案
-
我已经投票结束这个问题,因为我认为它太宽泛了,即不是关于特定的编程问题。不过我可能错了……
-
我们知道的不够多,无法给出一个好的答案。可能是这些东西重叠,所以 itemscontrol 不是一个好方法。类型可能不是理想的驱动程序,因此数据模板选择器可能更合适。嵌套控件可能是一个想法。