MVVM - 动态创建view / viewmodel的多个实例

时间:2013-02-18 13:25:11

标签: wpf mvvm

我需要显示一些图表/图表“缩略图”。单击其中一个将显示“展开视图”(在单独的面板中),其中显示更大版本的图表,以及用于查看和操作图表的控件。

会有许多不同的图表,每个图表都以不同的方式绘制我的数据。此外,给定的图表类型可能会出现多次,每次都会绘制不同的数据子集。 “展开”视图中的控件也会因图表类型而异,因此这里没有什么共性。

我很难理解如何在MVVM中对所有这些进行建模,特别是考虑到需要动态创建未知数量的缩略图(在某些情况下需要多个相同类型的实例)。

大声思考,我想我需要一个代表单个缩略图的视图/视图模型(视图包含图表组件,VM会公开要绘制的数据)。我想我还需要一个V / VM用于“缩略图列表”UI,负责创建缩略图并通过集合公开它们以绑定到列表。但它如何实例化这些呢? VM被注入其视图中,表明“缩略图列表”VM必须动态实例化缩略图视图 - 但VM应该不具备视图知识吗?!

最后,当我显示“展开”视图时,(以某种方式)将缩略图中使用的图表组件/视图传递给它是有意义的,以避免再次渲染图表,但是如何?

如果相关/有帮助,我会使用Castle Windsor进行依赖注入,以及Prism的导航功能。

1 个答案:

答案 0 :(得分:1)

这确实是一个复杂的话题,......

我建议使用VM来获取图标列表,而不是图标本身。这可能与IconListViewModels的特性有关。然后你应该考虑ChartViewModelFactory。它与您的DIC一起使用。

重要的讨论是VM-V婚姻。首先查看或查看模型...如果基于您的视图模型返回匹配视图,则单向也可以是ViewResolver ...这可以依赖于某种约定。因此,最后的步骤可以是询问工厂的视图模型,找到匹配视图将它们粘合在一起并将它们绑定到内容呈现器...

我希望这有助于您入门......