WPF / MVVM - 将ViewModel保留在应用程序组件中还是单独存在?

时间:2011-01-15 08:39:57

标签: wpf mvvm views

我有一个WPF应用程序,我正在使用MVVM模式。

我为需要用户输入的操作激活了VM,因此需要从VM激活视图。

我已经开始将VM分成单独的组件/程序集,部分原因是我将它们视为单元可测试部分,部分原因是视图应该依赖于VM,而不是相反。但是当我需要打开一个窗口时,VM就不知道窗口了。

我发现所有介绍都将VM放在WPF / App组件中,从而消除了这个问题。

本文建议将它们保存在不同的图层中:http://waf.codeplex.com/wikipage?title=Architecture%20-%20Get%20The%20Big%20Picture&referringTitle=Home

在我看来,我有以下选择

  1. 将VM移至WPF / App程序集以允许VM直接访问Windows。

  2. 将视图的接口放在VM-assembly中,在WPF / App程序集中实现视图,并通过IOC或其他方式注册连接。

  3. 将来自VM的'请求'发送到某个机制/总线,路由请求(但是哪种机制!?例如Prism中的东西?!)

  4. 建议是什么?

    感谢您提出任何意见,

    丹麦安德斯

2 个答案:

答案 0 :(得分:2)

不要选择选项1.您将从VM添加不需要的依赖关系。

选项2和3都有效且正在使用。在这些之间挑选有时是品味问题。我认为IOC能够更好地实现/允许模拟,而消息总线适用于小型应用程序。

答案 1 :(得分:0)

将ViewModel保存在与Views不同的程序集中。

如果您查看CinchMEFedMVVM,您会看到使用MEF连接视图和视图模型的强大机制。保持它们分离有助于无头地运行应用程序(无UI),这对于测试和公开API非常有用。