有些东西一直困扰着我关于MVVM的内容 - 如果我使用视图优先的方法来构建我的对象(这看起来是最常见的方法,至少在阅读和搜索之后),我该如何获得上下文信息输入到视图模型中?初始化视图模型
我见过很多类似问题的答案,都说“使用DI容器注入模型”,但这并不能帮助我,所以我将提供一个小例子。
假设我的应用程序是PeopleEditor。它用于加载和编辑复杂的People对象。当你加载应用程序时,你会得到一个主屏幕,将一群人加载到内存中 - 比方说,这些都可以通过我可以从我的容器中获得的集合访问。通过点击一个人,你会被带到编辑器屏幕。编辑器很复杂,所以这不是在一个屏幕中实现的简单的主细节视图。
所以,在主屏幕上,当我点击一个人时,应用程序需要创建一个新的视图和视图模型并显示视图。如果我首先通过容器创建视图模型,我可以用适当的人物对象初始化它。 这对我来说似乎很自然,所以我很难弄清为什么视图优先似乎是主要模式。如何使用视图优先方法来做到这一点?该视图将创建视图模型,该视图模型可以获取People的集合,但不知道其编辑的是哪个人。编辑清晰度:多人编辑可以同时存在,每编辑一个不同的人。
Prism 4.0 alpha的MVVM参考实现使用“状态处理程序”,它基本上是应用程序用来在容器中存储构造函数参数的服务。它保存状态并调用ShowView,并且最终创建的视图模型会导入一个状态对象。这对我来说看起来很笨拙 - 就像它试图假装它真的不是那么松散耦合。其他人是否有其他指导?
为什么你不想当你说的更自然地你使用视图模型第一种方法? marlon grech表示,视图或视图模型首先是个人偏好的选择(视图首先更容易与混合使用)。我也这么认为,我使用最适合我的场景的方法。所以我在我的应用程序中混淆了两者,这取决于我想要做什么。 – blindmeis 2010-09-01 06:36:43
有趣的问题。我总是问自己关于视图优先方法的相同问题......视图模型 - 首先看起来更加自然,所以这就是我始终使用的方法 – 2010-09-01 08:16:50
@blindmeis:谢谢你的回应。这并不是说我不想首先使用viewmodel--事实上,这就是我现在的应用程序的结构 - 只是我很好奇如何以视图优先的方式来完成它。我在应用程序中试图实现的东西对我来说看起来相当普遍,而viewmodel-首先看起来很自然,答案是我无法弄清楚为什么更多更好地选择“viewmodel composition”或“viewmodel-first”。 – nlawalker 2010-09-01 14:20:02