WPF 中的 MVVM

模型和檢視模型

模型的定義經常引起激烈爭論,模型和檢視模型之間的界限可能會模糊不清。有些人不喜歡汙染他們的模型與 INotifyPropertyChanged 介面,而是在檢視模型,複製模型屬性確實實現此介面。像軟體開發中的許多東西一樣,沒有正確或錯誤的答案。務實,做任何正確的事情。

檢視分離

MVVM 的目的是將這三個不同的區域分開 - 模型,檢視模型和檢視。雖然檢視可以接受檢視模型(VM)和(間接)模型,但 MVVM 最重要的規則是 VM 應該無權訪問檢視或其控制元件。VM 應通過公共屬性公開檢視所需的所有內容。VM 不應直接暴露或操作 UI 控制元件,如 TextBoxButton 等。

在某些情況下,這種嚴格的分離可能很難處理,特別是如果你需要啟動並執行一些複雜的 UI 功能。在這裡,在檢視的程式碼隱藏檔案中使用事件和事件處理程式是完全可以接受的。如果它純粹是 UI 功能,那麼無論如何都要利用檢視中的事件。這些事件處理程式也可以在 VM 例項上呼叫公共方法 - 只是不要將它傳遞給 UI 控制元件或類似的東西。

RelayCommand

不幸的是,這個例子中使用的 RelayCommand 類不是 WPF 框架的一部分(應該是!),但幾乎每個 WPF 開發人員的工具箱都會找到它。線上快速搜尋將顯示大量可以解除的程式碼片段,以建立自己的程式碼片段。

RelayCommand 的一個有用的替代品是 ActionCommand,它作為 Microsoft.Expression.Interactivity.Core 的一部分提供,提供相當的功能。