使用事件被認爲是不好的,當使用MVVM模式時,所有的UI邏輯都應該通過命令來實現?WPF。 MVVM。使用事件是一個不好的語氣?
回答
值得考慮一下MVVM模式的真正含義。的顧慮
- 分離 - (這是適用於所有的UI模式)視圖邏輯的
- 單元測試中,通過執行視圖模型沒有圖。
- 開發人員設計工作流程,允許使用Blend的設計人員使用相同的代碼。
如果在代碼後面處理UI事件並不禁止以上操作,那就沒有問題了!
我個人使用命令,如果可以的話,但不關心是否需要一點代碼隱藏。
完全同意。不使用代碼隱藏,不使用事件等是一個指導原則,讓你認爲「等一下,有沒有更多的MVVM方式來做到這一點?」如果沒有,那麼繼續。 – Tim 2011-05-18 21:56:39
我同意。代碼隱藏是找到它是否只是簡單的視圖佈線,不涉及狀態或邏輯。 – 2011-05-18 23:51:29
這取決於如何使用事件。我相信如果你使用事件進行UI特定的效果,你會好的。畢竟,您的視圖定義了用戶界面的行爲方式,所以它甚至可以將用戶界面特定的邏輯代碼隱藏在視圖中。
但是,您的應用程序/業務邏輯應該在ViewModel或Model中。在這種情況下,如果綁定不需要執行任務和事件,則所有事件處理程序都應該將所有邏輯委託給ViewModel。
要添加到ColinE的答案,事件可以使用,但允許隱藏事件的問題是,這是一個滑坡。你添加一個東西,然後添加另一個東西,並且突然間你在代碼隱藏類中創建了實際的邏輯。 (如果您正在與團隊中其他經驗較少的程序員一起工作,則更加突出)。
這就是爲什麼我更喜歡,幾乎沒有例外,不寫代碼後面的AT ALL。 每個適合代碼隱藏而不是真正的應用程序邏輯代碼的代碼也可以寫在Behavior中,這使得架構更加嚴格和易於定義。
此外,Behaviors是WPF4的一個強大的附加組件,它們的本質非常封裝,並且可重複使用,所以通常情況下您最好使用任何標準的行爲。
- 1. 的Win32事件+ WPF + MVVM
- 2. 在WPF(MVVM)中建立Model是否是一個好習慣?
- 3. 這是WPF最好還是廣泛使用的MVVM Toolkit?
- 4. WPF MVVM事件訂閱
- 5. MVVM事件的一個很好的方法
- 6. WPF的MVC(而不是mvvm)?
- 7. 如果我使用REST概念,將它與WPF中的MVVM結合起來,是不是一個好主意?
- 8. WPF-MVVM:從DataGrid風格的Handeling事件
- 9. WPF MVVM拖放到另一個控件引發一個事件只
- 10. 使用MVVM Light綁定WPF圖像控件事件EventToCommand
- 11. 事件而不是MVVM中的命令?
- 12. WPF MVVM事件命令 - 基於事件參數調用命令
- 13. WPF MVVM:綁定命令到事件
- 14. WPF Bingmaps圖釘事件綁定mvvm
- 15. WPF與MVVM和Prismv2 - 事件冒泡?
- 16. 如何最好地應用WPF MVVM?
- 17. WPF/MVVM:重構代碼隱藏,使其準備好MVVM結合
- 18. 使用MVVM的WPF導航
- 19. 使用WPF和C的MVVM#
- 20. 使用EF CodeFirst的WPF MVVM
- 21. 這是一種在WPF和MVVM中創建對話框的不好方法嗎?
- 22. 如何使用WPF DataGridRow事件與Interaction.Triggers/MVVM EventToCommand
- 23. 如何使用MVVM在wpf中實現控制事件?
- 24. 使用MVVM從WPF ListView項目中觸發雙擊事件
- 25. 對於MVVM哪個MVVM框架好?
- 26. 導入require'd文件,就好像它是一個使用語句
- 27. WPF使用MVVM動態添加單個控件通過綁定使用MVVM
- 28. 在WPF + MVVM應用程序中使用Prism的好處是什麼
- 29. 示出不同用戶控件 - WPF MVVM
- 30. 需要良好的MVVM教程WPF
取決於你指的是什麼樣的事件。路由事件是WPF MVVM的一個主要部分。 – BoltClock 2011-05-18 21:44:54
我在我的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