我正在介绍如何在真实世界的应用程序中使用MVVM,并且我将在使用MVVM作为应用程序模式时涉及的宗教战争设计决策中包含一节。在MVVM应用程序中,有两种主要方式(我知道)实例化一个新的View / ViewModel对:
根据您的经验,每种方法的优缺点是什么?它们启用了什么以及您遇到的问题是什么?
答案 0 :(得分:16)
鉴于WPF中的数据模板功能,我认为ViewModel-First是WPF 预期的使用方式。
我将澄清该声明:Data Templating允许您永远不会从ViewModel实例化视图。如果正确完成,您的Views和ViewModel可以保存在不相互引用的单独项目中。此外,ViewModel项目甚至不应引用任何PresentationFramework程序集,使您的ViewModel可供任何可以想象的用户使用。
答案 1 :(得分:5)
我倾向于首先选择View-Model,因为我觉得它最符合DRY规则。当你开始创建更大规模的应用程序时,我发现这也使得测试更容易,因此超过了在设置应用程序时需要处理的头痛问题。
答案 2 :(得分:4)
警告 - 我使用WPF而非Silverlight。
通过虚拟机实例化V(这是我的方式),视图是独立的,可以独立于VM使用(例如在设计器中)
就个人而言,我正在向MVVMC(模型,视图,ViewModel,Controller)转向,我有一个控制类,它实例化ViewModels和Views并“加入它们”。然后,C还处理获取数据(并缓存它等)以及跨VM和Vs的任何通信(例如,如果实例化V,将命令路由到其VM以执行某些操作,VM可能会要求C执行代表它的行动;然后C可以引发其他VM可以处理的适当事件
如果(无论是否使用控制器)我需要一台虚拟机与另一台虚拟机通信,如果V实例化一台虚拟机则更难实现 - 因为我不需要在虚拟机中暴露虚拟机(或至少使一些界面可用,以便第二个VM可以与第一个通信。
答案 3 :(得分:1)
我们首先使用了ViewModel,但是当进行外包时,使用混合成为最重要的事情,我的老板说View-first比Viewmodel优先 - 我不同意他(但是一对多是不是最佳的投票比率;-)),因为现在我们与代码背后的视图事件有一些怪异的联系。现在我处于不可逆转的状态,而且由于变化,我陷入了一些自定义控件 -
答案 4 :(得分:1)
我更喜欢使用视图模型第一种方法。出于多种原因:
答案 5 :(得分:0)
我使用View-first(排序)方法。我使用带有测试数据的虚拟视图模型与我的客户端合作定义View。当我们满意时,我继续从'dummy'中提取一个接口并实现真正的ViewModel。我发现这种方法最吸引人的原因如下:
我在WPF工作,但我认为在SL中不会有太大的不同。此外,我从不花时间测试可能归因于我选择方法的观点。