【问题标题】:MVVM - dynamically create multiple instances of view/viewmodelMVVM - 动态创建视图/视图模型的多个实例
【发布时间】:2013-02-18 21:39:19
【问题描述】:

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

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

我正在努力弄清楚如何在 MVVM 中对所有这些进行建模,尤其是考虑到需要动态创建未知数量的缩略图(在某些情况下,还有多个相同类型的实例)。

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

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

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

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

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

    我会为图标列表建议一个虚拟机,而不一定是图标本身。这可以绑定到IconListViewModels 的属性。那么你应该考虑一个ChartViewModelFactory。与您的 DIC 配合使用。

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

    我希望这有助于您开始...

    【讨论】:

    • 关于单个 IconListViewModels VM - 不确定我是否可以将每个拇指的数据作为单独的属性公开,因为“数据集”的数量会在运行时发生变化。我可以使用数组,但是如何配置每个缩略图视图以绑定到该属性的不同元素?我正在考虑将数据集传递给ViewResolver,然后将其分配给视图的DataContext。你为我指明了正确的方向,并让我思考了一些事情。而且我也没有想过将视图绑定到 ContentPresenter - 好技巧!
    • 这和往常一样取决于...我的意思是保持嵌套 VM 低。想想它是否必须是一个复杂的 ViewModel 或只是一些属性......但我没有看到任何代码,所以这里没有法官。但建议可能是:IconListViewModel 应该包含 OberservableCollection ...也可以是 ObservableCollection。很高兴我能帮上忙。请标记 q。回答是否有帮助=)
    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多