2010-06-01 129 views
41

誰能告訴我在WPF中使用命令vs事件的優點嗎? 命令或事件是否運行到內存泄漏? 什麼是最快的方法。它們的缺點是什麼?WPF命令vs事件優點/缺點

回答

34

命令提供了事件處理兩大好處:

  1. 命令不掛 來電者,因此相同的命令不 依賴,可以從 菜單,工具欄按鈕,鍵盤被調用, 等
  2. 命令提供 支持啓用/禁用基於 命令的狀態的所有相關的UI 對照(可以執行或不)

我更喜歡在實際項目中使用命令,特別是如果您想使用M-V-VM。

我還沒有聽說任何與命令有關的內存泄漏。

事件可能會更快,但差異不應該很大 - 我在我的項目上使用了兩年的命令,並沒有任何性能問題。

有關命令的詳細信息,請參閱Commanding Overviewarchive)(v4

+1

你不能訂閱相同的事件處理程序到工具欄按鈕,鍵盤等嗎?這些看起來像是爲你的代碼添加了一層複雜的代碼tbh。 – 2017-01-04 04:05:41

+1

更好的理由是事件處理程序只能在代碼後面進行管理,您不能簡單地將其移動到ViewModel。命令提供鬆耦合。 – 2017-01-12 23:21:05

3

命令是整合事件更標準的方式。它可以比事件更有用,因爲藉助它們,您可以定義單個任務(命令)並從不同的地方使用它。例如你可以定義一個保存命令並使用一個菜單項,一個上下文菜單項和一個按鈕來同時使用它。這樣你可以集中任務。還有命令支持數據綁定,這是WPF應用程序非常強大的功能。據我所知,命令會導致某些類型的內存泄漏,但您可以通過使用許多解決方法來避免這種情況。我必須補充一點,MVVM設計模式也使用命令作爲設計WPF應用程序的標準方法。處理事件要簡單得多,但命令提供了許多強大的設計。但是現在你必須不能總是使用命令而不是事件。有許多地方你只能使用事件。

0

此外WPF4.0允許綁定到命令定義。這使得從視圖模型公開命令變得更加容易,極大地幫助您將邏輯與UI關注區分開來。

+0

你能詳細說明一下嗎? – MarqueIV 2017-03-14 20:46:37

29

雖然命令和事件可以重疊,但它們是兩回事。命令說「做這個!」,而事件說「這剛剛發生!」。 所以你可能有一個CloseWindowCommand來關閉一個窗口,但是窗口可能有一個ClosingEvent來告訴正在關閉的訂閱對象。

+4

但有趣的是,事件將在命令之前執行。 – Shoe 2014-02-07 19:31:36

+0

@Shoe - 你還期望什麼?這完全有道理,與T.J.Kjaer所說的並不矛盾。 – WoIIe 2015-05-19 14:40:49

+6

@Wolle在「做到這一點之前說」這件事發生了!「就是我所說的,我從來沒有說過他錯了。 – Shoe 2015-05-19 16:34:42