在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中的普通事件,命令和路由事件只是一個補充。 –