WPF命令与事件的优缺点

52

有人能告诉我在WPF中使用命令(Command)和事件(Event)的优势吗?命令(Command)和事件(Event)是否会出现内存泄漏?哪种方式更快?它们有什么缺点?

5个回答

41

命令相比事件处理程序有两个主要优点:

  1. 命令不与调用者链接,因此可以从菜单项、工具栏按钮、键盘等多个位置调用相同的命令,而不会产生依赖。
  2. 命令提供支持,可以基于命令的状态(可执行或不可执行)启用/禁用所有相关的用户界面控件。

如果您想使用M-V-VM,我更喜欢在实际项目中使用命令。

我没有听说过任何与命令相关的内存泄漏。

事件可能更快,但差异不应该很大 - 我已经在我的项目中使用命令2年了,并且没有性能问题。

有关命令的更多详细信息,请参见命令概述(档案)(v4)。


3
你不能将相同的事件处理程序订阅到工具栏按钮、键盘等上吗?这些似乎是为代码添加整个复杂性的薄弱理由。 - Francisco Aguilera
7
更好的论点是事件处理程序只能在代码后台中进行管理,无法将其简单地移动到 ViewModel 中。命令提供松耦合。 - Francisco Aguilera

37

尽管命令(Commands)和事件(Events)可能会有重叠,但它们是两种不同的东西。命令传达的是“做这个!”的信息,而事件传达的是“这刚刚发生了!”的信息。因此,你可以有一个CloseWindowCommand来关闭窗口,但窗口可能会有一个ClosingEvent来告诉订阅对象它正在关闭。


@Shoe - 你还期望什么?这完全合理,不违背 T.J.Kjaer 的说法。 - ˈvɔlə
7
“@Wolle在‘do this!’之前说‘this just happened’的英语是我评论的重点。我从未说他错了。” - jamesSampica

5

命令是一种更标准的集成事件方式。它们比事件更有用,因为借助它们,您可以定义一个单一任务(命令)并从不同位置使用它。例如,您可以定义一个保存命令,并同时使用菜单项、上下文菜单项和按钮来使用它。这样,您可以将任务集中在一起。此外,命令支持数据绑定,这是 WPF 应用程序的一个非常强大的功能。据我所知,命令会导致某些类型的内存泄漏,但您可以使用许多解决方法来避免这种情况。我必须补充说,MVVM 设计模式也使用命令作为设计 WPF 应用程序的标准方式。与事件一起工作要简单得多,但命令提供了更强大的设计能力。但您必须知道,并不总是可以使用命令代替事件。有许多地方只能使用事件。


0
此外,WPF4.0允许绑定到命令定义。这使得从视图模型公开命令变得更加容易,最终帮助您将逻辑与UI关注点分离。

你能详细说明一下吗? - Mark A. Donohoe

-6

命令是路由事件。


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