过去两年我一直在使用MVVM,从那时起它肯定已经发展得更好了。当我阅读数百篇MVVM文章和stackoverflow问题时,我注意到似乎有越来越多的文章将view / viewmodel关系和创建描述为ViewModel优先或View优先。这些文章通常使用IoC或DI。
我最喜欢的技术是使用datatemplates来创建视图,并将应用程序结构化为视图模型而不是视图。我很少看到使用这种模式的文章。
<DataTemplate DataType="{x:Type ViewModels:DummyViewModel}">
<Views:DummyUserControl DataContext="{Binding}"/>
</DataTemplate>
可测试性和解耦似乎是这些“非数据模板”V-VM创建/关系设计和文章的主要焦点,通常它们与MEF或PRISM有关。最后,我想了解以下内容:
如果与MEF / PRISM无关,请欣赏与涵盖这些主题的文章的任何良好链接。
答案 0 :(得分:2)
1. DataTemplate视图创建技术是否仍在使用或推荐?
这是我在MVVM中操作的首选方法。我非常喜欢这种方法,原因我将在下面说明。我在我的所有开发中都使用它。
2.视图第一次设计的优点/缺点是什么?
我发现这里的主要专家是在设计时体验中更容易一些。设计者提前“知道”数据上下文,并且往往能够更轻松地完成工作。
从我的角度来看,主要的是你在View和ViewModel之间添加了更紧密的耦合。选择特定模型进行传球也更加困难。
3. viewmodel第一次设计的优点/缺点是什么(注入视图)
我个人喜欢这种方法。这样,应用程序的“逻辑”方面完全包含在ViewModel层中。通过使用ContentPresenters,您可以让ViewModel轻松生成其他ViewModel,定义应用程序的“流程”。设计师可以很容易地改变视图。
虽然这里的设备时间可用性略有下降,但由于视图在设计时并不真正了解VM,因此您会失去一些可设计性。
答案 1 :(得分:0)
我们经历过DataTemplate方法有一些局限性。例如,模板被实例化为共享(单例)实例。在某些情况下,这会产生不良副作用。这就是我们使用ViewModel第一个设计(注入视图)的原因。
我们使用的方法在 WPF应用程序框架(WAF)项目页面中进行了描述:
http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf