想象一下,有一个View将显示数据收集的多个步骤。根据上一步的决定,以下步骤的顺序或特定实例将有所不同。MVVM ViewModel支持多个步骤:最佳实践?
以下MVVM纯粹主义最佳实践,我认为在外部ViewModel中有一个ViewModel的列表就是解决这个问题的方法,并让外部视图绑定一个自定义选项卡控件(或类似的)。
这使我对这个问题的两个方面,它们是我不清楚:
点一:“哪个先?”
外部View/ViewModel组合可能会是“View First”。也就是说,视图要么接收ViewModel,要么实例化一个。
但是,当涉及到这个外部ViewModel中ViewModel的列表:它们各自的视图来自哪里?哪个实体负责为每个实体选择最佳视图?
我并不都很喜欢像这样在“View First”和“ViewModel First”之间交替。
点二:的ViewModels
之间的通信当的内视图模型的步骤之一的完成,例如在点击“保存”或“下一步”按钮时,应该对该内部ViewModel发出命令,然后显示下一个命令。
这需要外视图模型到:
能够拿起发送到内视图模型
能够内视图模型内访问数据的保存命令。
通常情况下会如何呢?将内部和外部ViewModel与事件绑定在一起被认为是不好的做法吗?
请看看[这里](http://stackoverflow.com/questions/5160829/how-do-i-design-a-复合视图和视图模型使用silverlight和mvvm),这个问题有一些相关的信息 – Snowbear 2011-04-01 08:55:36
视图首先只有一个正确的方法,因为传递视图模型的视图违反了MVVM的原则。相应的视图在xaml中应用,如' '。通信使用MvvmLight库中的Messenger类。 –
vorrtex
2011-04-01 12:25:52
我使用[DI库](http://en.wikipedia.org/wiki/Dependency_injection)并在其映射中选择视图和视图模型,将顶层“模块”代码中的内容绑定在一起。但我的应用程序从未如此复杂。这也不能解决你的子视图问题。像棱镜[区域功能](http://msdn.microsoft.com/en-us/library/microsoft.practices.prism.regions(v = pandp.40).aspx)可能有助于此。 – 2011-11-17 10:14:56