Dot-Net

WPF MVVM 使用命令與事件處理程序

  • September 22, 2010

我喜歡 MVVM 模式,一旦你開始使用它,你就會沉迷其中。

我知道在完美世界中,您的 View 程式碼隱藏幾乎是空的(可能是建構子中的一些程式碼),並且 View 的各個方面都是從 ViewModel 操作的。

但是有時在 ViewModel 中創建新欄位、屬性和命令會比在事件處理程序中實現相同的東西創建更多的程式碼。

目前我堅持以下規則:

如果事件處理程式碼操作其視圖的很小部分(例如,按鈕點擊事件處理程序增加位於同一視圖上的某些 TextBlock 的字型),則可以在事件處理程序內實現邏輯。但是如果 View 需要操作業務邏輯或訪問視圖之外的資源,那麼我將這些職責分配給 ViewModel。

你覺得我的方法怎麼樣?

在使用事件處理程序和 ViewModel 時,您會盡量避免什麼?

在使用 MVVM 模式時,您可以推薦哪些最佳實踐?

我會說你的經驗法則還不錯。

在我看來,核心問題是“程式碼視圖是特定的,還是解決業務邏輯?”。

視圖中有程式碼是可以的,如果程式碼在這裡是為了修改視圖而不是執行任何類型的業務邏輯。您更改字型大小的範例是在視圖中非常好的程式碼範例(並且會增加 ViewModel 中的噪音,使其更難理解和維護)。從本質上講,如果你使用觸發器,你已經做了一些,所以這並不奇怪。

但是請記住,如果您使用單元測試,那麼測試那一點視圖邏輯將非常困難。如果您需要對其進行測試,最好將其放在視圖模型中。

引用自:https://stackoverflow.com/questions/705099