WPF中各种视图创建技术的优缺点是什么?

12

我过去两年一直在使用MVVM,它自那时以来已经发展得更好了。当我阅读数百篇MVVM文章和stackoverflow问题时,我注意到越来越多的文章描述了ViewModel先或View先的视图/视图模型关系和创建方式。这些文章通常使用IoC或DI。

我的最爱技术是使用DataTemplate创建视图,并根据视图模型而不是视图来构建应用程序。我很少再看到使用这种模式的文章了。

<DataTemplate DataType="{x:Type ViewModels:DummyViewModel}">
  <Views:DummyUserControl DataContext="{Binding}"/>
</DataTemplate>

这些“非数据模板”V-VM创建/关系设计和文章似乎主要关注可测试性和解耦,通常涉及MEF或PRISM。最终我想知道以下内容:

  1. 是否仍然使用或推荐DataTemplate视图创建技术?
  2. 视图优先设计的利弊是什么?
  3. 使用视图模型优先设计(将视图注入)的利弊是什么?

如果有任何涵盖这些主题的好文章链接,不涉及MEF/PRISM,将不胜感激。

2个回答

2

1.数据模板视图创建技术是否仍被使用或推荐?

这是我在MVVM中使用的首选方法。 我非常喜欢这种方法,原因如下。 我在所有开发中都使用它。

2.视图优先设计的利弊是什么?

我发现主要好处在于设计时体验更加容易。 设计师事先“知道”数据上下文,并且往往能够更轻松地工作。

从我的角度来看,主要的缺点是在视图和视图模型之间增加了更紧密的耦合。 选择特定的模型进行传递也更加困难。

3.视图模型先设计的利弊(注入视图)是什么?

我个人喜欢这种方法。 这样,您的应用程序的“逻辑”部分完全包含在ViewModel层中。 通过使用ContentPresenters,您可以轻松地让ViewModel生成其他ViewModels,定义您的应用程序的“流程”。 视图可以很容易地由设计师更改。

缺点在于,在设计时可用性略有降低-因为视图在设计时实际上对VM一无所知,您会失去一些可设计性。


这完全符合我的个人经验和观点。最近关于使用容器生成视图和视图模型的文章很多,我开始担心自己“错过了时代”。你是否使用接口将视图注入到视图模型中?就我个人而言,我不希望我的视图模型与视图有任何引用关系。 - user259509
我没有提到MEF - 但实际上我也在使用它。它非常有用,可以处理上述情况(例如:服务)中的边缘情况,以及实际执行数据模板。您可以使用MEF从视图内设置DataTemplates,而无需污染您的app.xaml,例如... - Reed Copsey
谢谢!我很感激您的反馈。 - Reed Copsey
为什么视图(View)和视图模型(ViewModel)之间的紧耦合是一个缺点? - Robert Rossney
1
它会降低设计的灵活性。在开发的所有部分中,尽可能保持松散耦合,这样可以更轻松地更改任何单个部分而不会破坏其他部分。设计中耦合越紧密,整体设计的灵活性就越小。 - Reed Copsey

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接