2011-05-18 21 views
1

使用事件被認爲是不好的,當使用MVVM模式時,所有的UI邏輯都應該通過命令來實現?WPF。 MVVM。使用事件是一個不好的語氣?

+0

取決於你指的是什麼樣的事件。路由事件是WPF MVVM的一個主要部分。 – BoltClock 2011-05-18 21:44:54

+1

我在我的WPF應用程序中廣泛使用代碼進行[與DWM API通信](http://stackoverflow.com/questions/5493149/how-do-i-make-a-wpf-window-movable-by-拖動最擴展玻璃幀)。例如,我使用的一個事件是Window.OnSourceInitialized與WPF窗口的Win32句柄進行通信。這是UI邏輯,絕對屬於視圖和代碼隱藏,而不是其他任何地方,並且與命令完全無關。 – BoltClock 2011-05-18 21:57:34

回答

9

值得考慮一下MVVM模式的真正含義。的顧慮

  • 分離 - (這是適用於所有的UI模式)視圖邏輯的
  • 單元測試中,通過執行視圖模型沒有圖。
  • 開發人員設計工作流程,允許使用Blend的設計人員使用相同的代碼。

如果在代碼後面處理UI事件並不禁止以上操作,那就沒有問題了!

我個人使用命令,如果可以的話,但不關心是否需要一點代碼隱藏。

+2

完全同意。不使用代碼隱藏,不使用事件等是一個指導原則,讓你認爲「等一下,有沒有更多的MVVM方式來做到這一點?」如果沒有,那麼繼續。 – Tim 2011-05-18 21:56:39

+0

我同意。代碼隱藏是找到它是否只是簡單的視圖佈線,不涉及狀態或邏輯。 – 2011-05-18 23:51:29

1

這取決於如何使用事件。我相信如果你使用事件進行UI特定的效果,你會好的。畢竟,您的視圖定義了用戶界面的行爲方式,所以它甚至可以將用戶界面特定的邏輯代碼隱藏在視圖中。

但是,您的應用程序/業務邏輯應該在ViewModel或Model中。在這種情況下,如果綁定不需要執行任務和事件,則所有事件處理程序都應該將所有邏輯委託給ViewModel。

3

要添加到ColinE的答案,事件可以使用,但允許隱藏事件的問題是,這是一個滑坡。你添加一個東西,然後添加另一個東西,並且突然間你在代碼隱藏類中創建了實際的邏輯。 (如果您正在與團隊中其他經驗較少的程序員一起工作,則更加突出)。

這就是爲什麼我更喜歡,幾乎沒有例外,不寫代碼後面的AT ALL。 每個適合代碼隱藏而不是真正的應用程序邏輯代碼的代碼也可以寫在Behavior中,這使得架構更加嚴格和易於定義。

此外,Behaviors是WPF4的一個強大的附加組件,它們的本質非常封裝,並且可重複使用,所以通常情況下您最好使用任何標準的行爲。

相關問題