【发布时间】:2010-09-01 05:39:46
【问题描述】:
关于 MVVM 的一些问题让我继续感到困惑 - 如果我使用视图优先的方法来构造我的对象(这似乎是最常见的方法,至少在大量阅读和搜索之后),我如何将上下文信息放入视图模型?
我看到很多类似问题的答案都说“使用 DI 容器注入你的模型”,但这对我没有帮助,所以我将提供一个小例子。
假设我的应用程序是 PeopleEditor。它用于加载和编辑复杂的 People 对象。当您加载应用程序时,您会看到一个主屏幕,它将一堆人加载到内存中 - 假设所有这些都可以通过我可以从我的容器中获取的集合进行访问。通过单击一个人,您将进入编辑器屏幕。编辑器很复杂,所以这不是在一个屏幕中实现的简单的主从视图。
所以,在主屏幕上,当我点击一个人时,应用程序需要创建一个新的视图和视图模型并显示视图。如果我首先创建视图模型,无论是否通过容器,我都可以使用适当的人员对象对其进行初始化。 这对我来说似乎很自然,所以我很难弄清楚为什么视图优先似乎是主要模式。我将如何使用视图优先方法来做到这一点?视图将创建视图模型,该模型可以访问 People 集合,但不知道其编辑的是哪个人。为清楚起见进行编辑:可以同时存在多个人编辑器,每个人编辑不同的人。
Prism 4.0 alpha 的 MVVM 参考实现使用“状态处理程序”,它基本上是应用程序用来在容器中存储构造函数参数的服务。它保存状态并调用 ShowView,最终创建的视图模型导入状态对象。这对我来说似乎很笨拙——就像它试图假装它是松散耦合的,而实际上并非如此。还有其他人有其他指导吗?
【问题讨论】:
-
当你说它对你来说更自然时,为什么你不想使用视图模型优先方法? marlon grech 说 view 或 viewmodel first 是个人喜好的选择(viewfirst 更容易与之混合)。我也这么认为,我使用最适合我的场景的方法。所以我根据我想要做什么在我的应用程序中混合使用。
-
有趣的问题。关于视图优先方法,我总是问自己同样的问题......视图模型优先似乎更自然,所以这就是我一直使用的方法
-
@blindmeis:感谢您的回复。并不是我不想使用视图模型优先——事实上,这就是我现在构建应用程序的方式——只是我很好奇如何以视图优先的方式进行操作。我试图在我的应用程序中实现的目标对我来说似乎相当普遍,并且 viewmodel-first 似乎是一个如此自然的答案,以至于我无法弄清楚为什么“viewmodel composition”或“viewmodel-first”会有更多更好的命中。跨度>
-
@blindmeis:另外,我看到 Blendability 提到了很多关于 view-first 和 viewmodel-first 的问题,我不明白为什么 Blendability 是一个问题了,现在我们有d:DataContext、d:DesignInstance 和 d:DesignData。我已经发布了一个后续问题:stackoverflow.com/questions/3619031/…
标签: mvvm silverlight-4.0