2012-06-18 89 views
4

在Winforms中,我们(开发人员)通过事件处理用户交互。 在WPF中我们得到了命令。Winforms中的事件和WPF中的命令有什么区别?

问题:

  1. 什么在的WinForms事件和命令在WPF之间的区别?我们必须使用哪种方法?什么时候?

  2. Winforms中的事件和WPF中的路由事件有什么区别?通过可序列化的对象,经过一个过程,不管,让我们说这是更“灵活”代表

+0

我强烈推荐阅读[MSDN关于路由事件的文章](http://msdn.microsoft.com/en-us/library/ms742806.aspx) – Rachel

+1

也有WPF中的普通事件,命令和路由事件只是一个补充。 –

回答

2
  1. 命令。

  2. 路由事件支持next strategies - direct, bubbling and tunneling,同样使用路由事件,您可以指示该事件是通过在事件参数中设置适当的标志来处理的。

+0

1.在哪些情况下我们必须序列化命令?我不明白这一点。 2.谢谢。我忘记旗帜。 – ZuTa

+1

@祖塔 - 这是一个全新的问题。提出一个问题并发布。 –

+0

@sll - 谢谢。我创造了一个新问题。 – ZuTa

1

我会强烈建议从我的角度来看然而通读MSDN's article on Routed Events,起步,最大的区别是它们是如何工作

的WinForms让您分配的方法,将事件处理程序,每当该控件的事件被提出,该处理程序得到运行。你实际上可以在WPF中做同样的事情,或者你可以使用路由事件。

在路由事件中,会生成一个事件(如单击事件),并且Visual Tree中的任何元素都可以订阅在Click事件中执行某些操作,并且可以将事件标记为已处理或未处理。

例如,假设有一个含有一个ButtonBorderImage

<Button> 
    <Border> 
     <Image> 
    </Border> 
</Button> 

点击Image不执行Button.ClickEvent,而是简单地提高了由所述第一Image处理的通用Click事件,然后是Border,然后是Button。本次活动将实际继续向上的VisualTree直到遇到Window对象,除非处理事件的控件的一个标记为Handled

这种类型的路由事件的被称为Bubbling事件,因为事件传播,或“泡沫” ,视觉树。另一个事件类型为Tunneling,其中事件沿着VisualTree或Direct传播,其中只有被点击的对象处理该事件。

至于Routed EventsCommands之间的差异,它们提供了两个独立的功能。事件是内置的,并与正在处理Event的UI对象绑定,而Command不以任何方式绑定到UI对象,并提供内置支持以启用/禁用控件。

例如,具有一个Click事件一个按钮将通过按钮对象插入到点击事件处理程序,同时与Command属性集合中的按钮将执行一个不相关的命令和自动启用/取决于Command.CanExecute()

禁用按钮

我使用MVVM设计模式,因此几乎总是使用命令(如果控件不支持Command属性,我使用自定义Attached Command Behavior,它允许我将命令附加到几乎任何UI事件),但我仍然使用事件当我想要做一些只影响View的事情时,不做任何业务逻辑。

相关问题