在Winforms中,我们(开发人员)通过事件处理用户交互。 在WPF中我们得到了命令。Winforms中的事件和WPF中的命令有什么区别?
问题:
什么在的WinForms事件和命令在WPF之间的区别?我们必须使用哪种方法?什么时候?
Winforms中的事件和WPF中的路由事件有什么区别?通过可序列化的对象,经过一个过程,不管,让我们说这是更“灵活”代表
在Winforms中,我们(开发人员)通过事件处理用户交互。 在WPF中我们得到了命令。Winforms中的事件和WPF中的命令有什么区别?
问题:
什么在的WinForms事件和命令在WPF之间的区别?我们必须使用哪种方法?什么时候?
Winforms中的事件和WPF中的路由事件有什么区别?通过可序列化的对象,经过一个过程,不管,让我们说这是更“灵活”代表
命令。
路由事件支持next strategies - direct, bubbling and tunneling,同样使用路由事件,您可以指示该事件是通过在事件参数中设置适当的标志来处理的。
我会强烈建议从我的角度来看然而通读MSDN's article on Routed Events,起步,最大的区别是它们是如何工作
的WinForms让您分配的方法,将事件处理程序,每当该控件的事件被提出,该处理程序得到运行。你实际上可以在WPF中做同样的事情,或者你可以使用路由事件。
在路由事件中,会生成一个事件(如单击事件),并且Visual Tree中的任何元素都可以订阅在Click事件中执行某些操作,并且可以将事件标记为已处理或未处理。
例如,假设有一个含有一个Button
Border
和Image
<Button>
<Border>
<Image>
</Border>
</Button>
点击Image
不执行Button.ClickEvent
,而是简单地提高了由所述第一Image
处理的通用Click
事件,然后是Border
,然后是Button
。本次活动将实际继续向上的VisualTree直到遇到Window
对象,除非处理事件的控件的一个标记为Handled
这种类型的路由事件的被称为Bubbling
事件,因为事件传播,或“泡沫” ,视觉树。另一个事件类型为Tunneling
,其中事件沿着VisualTree或Direct
传播,其中只有被点击的对象处理该事件。
至于Routed Events
和Commands
之间的差异,它们提供了两个独立的功能。事件是内置的,并与正在处理Event的UI对象绑定,而Command不以任何方式绑定到UI对象,并提供内置支持以启用/禁用控件。
例如,具有一个Click
事件一个按钮将通过按钮对象插入到点击事件处理程序,同时与Command
属性集合中的按钮将执行一个不相关的命令和自动启用/取决于Command.CanExecute()
我使用MVVM设计模式,因此几乎总是使用命令(如果控件不支持Command
属性,我使用自定义Attached Command Behavior,它允许我将命令附加到几乎任何UI事件),但我仍然使用事件当我想要做一些只影响View的事情时,不做任何业务逻辑。
我强烈推荐阅读[MSDN关于路由事件的文章](http://msdn.microsoft.com/en-us/library/ms742806.aspx) – Rachel
也有WPF中的普通事件,命令和路由事件只是一个补充。 –