为什么在WPF中使用命令而不是事件处理程序

时间:2016-06-22 15:35:34

标签: c# wpf mvvm

我在一年前和WPF使用MVVM,我想不完整,因为我不使用命令。直到现在,我真的做了我所需要的一切,没有命令,它工作正常,但对我来说最重要的是,它的明确和简短,MVVM的理论说no code behind,但是,为什么变得复杂1000个班级,每个按钮或活动一个?

我真的没有看到收益。这只是概念还是还有更多?

2 个答案:

答案 0 :(得分:5)

您的问题太广泛,无法排成一行。但我正在回答这个问题,因为我现在已经和MVVM合作了很长时间,并且在没有MVVM的情况下也在WPF工作过。

正如评论指出你的话: MVVM的理论说没有任何代码背后的原因为什么会复杂化1000个类,每个按钮或事件一个

实际上并非如此。因为使用MVVM有很多好处,这就是为什么这个问题太宽泛的原因。

我很惊讶您到目前为止还没有使用命令并且您正在使用MVVM。因为命令是MVVM的主要部分。使用MVVM的主要好处是它真正帮助我们

  1. 分隔视图和模型。没有人希望他们的代码隐藏(YourPage.xaml.cs)包含所有与数据相关的代码,数据操作,设计以及设置用户控制数据等。如果您想修复代码中的错误或有人想要查看错误,情况会更糟。在MVVM中,您可以拥有一个干净的代码。事件处理程序和命令之间没有太大区别。但是如果你想通过按钮点击更新几个视图,MVVM可以非常简单地处理它。

  2. 数据绑定可确保更好的可维护性和可读性。您可以将Text属性绑定到视图模型属性,并在每次模型更改时更新它,而不是设置TextBox1.Text =“Hello World”。这真是一件好事。谁想在每次模型更改时编写用于更新视图的代码。想想现在保存了多少行代码。一切都是通过数据绑定完成的。如果要在单击按钮时更改10个文本框内容,则绑定将非常方便。因此,它减少了紧耦合

  3. 可测试性:开发人员可以在不使用视图的情况下为视图模型和模型创建单元测试。视图模型的单元测试可以使用与视图使用的功能完全相同的功能。此外,许多开发人员可以同时使用同一产品,因为可以将大视图拆分为较小的视图,并且可以非常轻松地划分工作。

答案 1 :(得分:2)

我将尝试解释为什么命令有用。

在MVVM中,View开发人员(设计人员)应该只做影响程序外观的事情,而ViewModel开发人员(程序员)只关心行为。

想象一下,您有一个带有提交按钮的表单。如果表单没有提交给数据库(例如),那就是程序员的问题;没有人会责怪设计师。但是,使用事件意味着一切都在View端完成。

这就是Command拯救的地方。它允许程序员执行逻辑,然后等待设计器绑定到它。程序员可以在没有设计(View)的情况下进行单元测试,并自豪地告诉人们它的工作原理。如果它中断,这意味着设计师没有正确绑定它。

当然,我相信这里有很多人会独自完成所有事情。在这种情况下,MVVM的有用性将会降低。但是请注意,当您完全删除VS项目中的所有视图时,您的ViewModel将进行编译并完全正常运行 - 除了没有GUI,并且它不能接收任何用户输入。通常,大多数项目要求都是行为性的,因此如果您的ViewModel正在运行,那么您将满足大多数要求。

最后,我想要指出的是,只要它纯粹只影响事物的外观并且不影响行为,就可以使用代码隐藏。当然,大多数完美主义者都希望没有代码隐藏,但在某些情况下,这并不总是可行。

相关问题