2012-06-18 86 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的事情時,不做任何業務邏輯。

相關問題