开始学习WPF MVVM,需要使用框架吗?

8
我看了一些Stack Overflow上的问题,比如这个mix10 building your own mvvm framework。我想知道,作为一个初学者,是从头开始(但我听到视频中不推荐)还是使用框架更好。
另外,哪个框架更适合初学者学习?我发现在阅读了相当多的文章或教程视频之后,我仍然感到很迷茫。我可能会在某些地方理解,但仍然没有完全掌握。 Caliburn Micro是一个更小、更容易学习的框架吗?还是来自Microsoft的MVVM Toolkit、Unity/Prism(这些MS框架之间有什么区别)或MVVM Light?

根据我们的主题相关指南,"即使某些问题符合上述类别之一,仍有一些问题是不适合的:...询问我们推荐或寻找书籍、工具、软件库、教程或其他离线资源的问题是不适合的..." - Robert Columbia
4个回答

11

在我看来,并不需要使用框架。MVVM只是一种做事情的方式。

首先,您只需要一个RelayCommand类,以便将命令绑定到您的viewModel上。您可以从Josh Smith MVVM Foundation下载它。

然后,当您更加熟练时,可以添加其他类,例如:

  • ObservableObject:这是ViewModel类型或必须 提供属性更改通知的任何类型的基类。 它实现了INotifyPropertyChanged, 并且在调试构建中,将验证通过 PropertyChanged事件传递的所有属性名称都是有效的属性。 这个类曾经被称为ViewModelBase

  • Messenger:Messenger类是在各种ViewModel对象之间传递消息的轻量级方法, 这些对象不需要知道彼此的存在。 这是基于Marlon Grech和Josh Smith创建的 Mediator实现,在Marlon的博客上可以看到。


10

我的意见:

我几周前开始使用WPF / Mvvm模式,可以肯定地建议首先启动一个测试项目,阅读有关mvvm的大量信息,并尝试自己实现它(即使仅使用其他人的部分内容)。 实现一些东西,再阅读一些东西,回过头来改变一些东西,然后再阅读一些东西。

这样做前两周,你就能了解到它实际上是关于什么的,看到一些问题并找到一些解决方案等等。 基本上,这将让您在手指中理解mvvm思想,并获得一些实践经验。

然后,如果你愿意,你可以放弃你的测试项目,决定是否真正开始编写自己的代码或使用现有的工具包,并可能更加欣赏和理解现有工具包的工作方式。

我最终没有使用现有的工具包,而是使用了自己非常简单的实现方式,因为我不需要为我的项目添加太多复杂性,但我确实更加欣赏了一些在网络上讨论的实现方式。

编辑: 当我谈论“两周”时,我的意思是“两周的业余时间”,大约是25个真实小时;-)


我认为我花了相当多的时间,大约3天(~=24小时!!!噢,我真是失败了)?整整几天...但是收获不多...是的,我尝试了Caliburn Micro及其介绍的Hello World应用,并成功了...卡在MEF部分...看了很多视频。甚至是Prism的,但仍然感到困惑... - Jiew Meng
2
这正是我建议不要从框架开始的原因。由于它们庞大的规模和功能列表,这些框架可能会让人感到非常压抑。如果您没有MVVM的经验,您可能不会理解其中99%的功能是用来做什么的。如果您开始自己编写一个非常简单的MVVM实现,您将遇到某些问题,并了解不同的解决方法。这样,您就可以学习,过一段时间后,这些框架就不再是黑魔法了 - 然后您可以考虑继续构建自己的系统或切换到现有的框架。 - Pygmy
我也有同样的问题,我没有使用框架(至少我不知道),只是复制了一些类的部分并使用它。我的一个相当大的业余项目(约20K行)现在没有MVVM会使窗口更新变得复杂。 - Michel Keijzers

3

在我看来,如果您正在学习WPF/MVVM,那么您必须彻底学习MVVM,并尝试从头开始构建框架(正如Eduardo所解释的那样)。

但是,如果您要开始进行商业项目或企业应用程序,则必须考虑使用一些已建立的框架,例如PRISM、Caliburn或MVVM Light Toolkit。

在我的第一个项目中,我们没有使用任何框架,我有点后悔。虽然没有出现任何问题,并且构建自己的框架并不是很困难(正如Eduardo所说),但我们花了很多时间和许多迭代来完成各种基类等。此外,由于我们完全不知道这些框架已经实现了各种功能,因此我们无法利用它们提供的各种优势。


0

我认为最好从一个“Hello World”应用程序开始。慢慢熟悉控件(列表视图、网格视图等),然后学习基本的WPF概念(绑定、模板、触发器等)。之后,您可以进入MVVM。


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