WPF命令和事件有什么区别?

8
WPF中的CommandEvent有什么区别?
5个回答

6

一般而言,事件和命令的功能几乎相同,只是处理用户交互的模式不同。

WPF中的命令允许您将命令处理程序的实现移到业务层。命令结合了启用状态和执行功能,因此一切都就位了。搜索MVVM模式以了解更多信息。

首次实现命令会更复杂,因此如果您的应用程序很小,您应该考虑坚持使用事件。


命令是SOA中常用的模式,事件则在事件驱动架构(EDA)中使用。 - Liton
2
WPF中的命令允许您将命令处理程序的实现移动到业务层,这是不正确的。它必须是“在视图之外”。 - Aliostad
6
在我看来,“业务层”通常是“视野之外”的。 - Liton
我不会同意那个; Commands是WPF中非常强大和有用的功能,相比事件提供了许多优势。如果你认真考虑WPF,那么你必须尽快开始使用命令。它真的简化了开发,并且非常容易使用(尽管你需要花费一些时间)。 - akjoshi
1
@akjoshi 我并没有说什么不同的意见。对于小型项目,我只是不会使用命令,因为它们会增加额外的负担。 - testalino

4

Commands类似于Events,但我们可以将任意数量的UI控件或输入手势与命令关联,并将该命令绑定到在激活控件或执行手势时执行的处理程序。

Command还可以跟踪其是否可用。 如果不可用,则与该命令关联的所有控件都将被禁用。

当命令被调用时执行代码位于命令的Execute事件处理程序中。决定命令是否可以被调用的代码位于命令的CanExecute事件处理程序中。

WPF有一些内置的命令:

Command Class          | Example Commands
-----------------------------------------------
ApplicationCommands    | Close, Cut, Copy, Paste, Save, Print
NavigationCommands     | BrowseForward, BrowseBack, Zoom, Search
EditingCommands        | AlignXXX, MoveXXX, SelectXXX
MediaCommands          | Play, Pause, NextTrack, IncreaseVolume, Record, Stop

2

你可以在视图(XAML)中绑定WPF命令并接收触发的事件。这样,您就不必使用代码后台,而这是MVVM中不允许的。

因此,绑定元素非常重要。但它还实现了CanExecute,如果返回false,则通常会使您的控件变为禁用状态,例如,如果它是一个按钮。


如果您能提供更多详细信息和更多参考资料,那么我们将非常感激您的反馈。对于初学者而言,您的反馈具有WPF开发人员可以遵循的参考价值。谢谢。 - user1298925

1
在事件中,动作与其来源紧密耦合,无法自由重用;使用命令,您可以轻松地在单个位置维护各种操作,并在应用程序的任何地方重用它们。
引用:
命令与附加到按钮或计时器的简单事件处理程序不同之处在于,命令将动作的语义和发起者与其逻辑分离。这允许多个和不同的来源调用相同的命令逻辑,并允许为不同的目标定制命令逻辑。
摘自 - 命令概述:http://msdn.microsoft.com/en-us/library/ms752308(v=VS.90).aspx 本文解释了命令的概念,在使用命令之前必须阅读。
此SO线程也有很多有用的信息。: 自定义WPF命令模式示例

0
粗略地说,Command 是封装了 Object(按钮、菜单)的启用/禁用状态和操作的一种封装。 Command 的限制:
  • 多播(可以使用多绑定,但不常见,也不如事件多播好用)
  • 需要两步才能点亮灯泡。(如果您的按钮始终处于启用状态,则只是浪费代码)。

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