共用方式為


Windows 資料繫結和 MVVM

模型-視圖-視圖模型(MVVM)是一種使用者介面 (UI) 架構設計模式,可將 UI 和非 UI 程式碼分離。 瞭解 MVVM 如何使用 XAML 中的資料繫結來啟用鬆散耦合,以同步處理 UI 和資料,進而改善可維護性並減少相依性。

因為它提供鬆散耦合,所以使用資料繫結可減少不同類型程式碼之間的硬相依性。 這種方法可以更輕鬆地變更個別程式碼單元 (方法、類別、控制項等),而不會在其他單元中造成非預期的副作用。 這種解耦是 關注點分離的一個例子,這是許多設計模式中的一個重要概念。

MVVM 的優點

解耦代碼有很多好處,包括:

  • 啟用迭代、探索性的編碼風格。 孤立的改變風險較小,也更容易嘗試。
  • 簡化單元測試。 您可以在彼此隔離的情況下個別測試程式碼單元,並在生產環境之外。
  • 支持團隊協作。 單獨的個人或團隊可以開發符合精心設計的介面的解耦程式碼,並在以後進行整合。
  • 提高可維護性。 修復解耦程式碼中的錯誤不太可能導致其他程式碼回歸。

相較於 MVVM,具有更傳統「程式碼後置」結構的應用程式通常會針對僅顯示資料使用資料繫結。 它會直接處理控制項所公開的事件來回應使用者輸入。 事件處理常式是在程式碼後置檔案 (例如 MainWindow.xaml.cs) 中實作,而且通常會與控制項緊密結合。 它們通常包含直接操作 UI 的程式碼。 此結構使得在不更新事件處理程式碼的情況下,很難或不可能取代控制項。 使用此架構時,程式碼後置檔案通常會累積與 UI 不直接相關的程式碼,例如資料庫存取程式碼,這些程式碼最終會被複製和修改以與其他視窗搭配使用。

應用程式層

當您使用 MVVM 模式時,請將應用程式分成下列層:

  • 模型層會定義代表商務資料的類型。 此層包含建立核心應用程式網域模型所需的一切,而且通常包含核心應用程式邏輯。 此層完全獨立於視圖和視圖模型層,而且通常部分位於雲端中。 假設已完全實作的模型層,您可以選擇建立多個不同的用戶端應用程式,例如 Windows 應用程式 SDK 和使用相同基礎資料的 Web 應用程式。
  • 檢視層會使用 XAML 標記來定義 UI。 標記包含資料繫結運算式 (例如 x:Bind),可定義特定 UI 元件與各種檢視模型和模型成員之間的連線。 您有時可以使用程式碼後置檔案作為檢視層的一部分,以包含自訂或操作 UI 所需的其他程式碼,或在呼叫執行工作的檢視模型方法之前從事件處理常式引數擷取資料。
  • 檢視模型層提供檢視的資料繫結目標。 在許多情況下,檢視模型會直接公開模型,或提供包裝特定模型成員的方法。 檢視模型也可以定義成員,以追蹤與 UI 相關但與模型無關的資料,例如項目清單的顯示順序。 檢視模型也可作為與其他服務(例如資料存取程式碼)的整合點。 對於簡單的專案,您可能不需要單獨的模型層,而只需要封裝您需要的所有資料的檢視模型。

基本和進階 MVVM

與任何設計模式一樣,實作 MVVM 的方式不只一種,而且許多不同的技術都被視為 MVVM 的一部分。 基於這個理由,有數個不同的第三方 MVVM 架構支援各種 XAML 型平臺,包括 Windows 應用程式 SDK。 然而,這些框架通常包含用於實現解耦架構的多個服務,使得MVVM的確切定義有些模糊。

雖然複雜的 MVVM 架構可能非常有用,特別是對於企業級專案,但採用任何特定模式或技術通常會產生相關成本,而且優點並不總是很清楚,具體取決於專案的規模和大小。 幸運的是,您可以只採用那些提供明確和切實好處的技術,而忽略其他技術,直到您需要它們為止。

特別是,只要瞭解並套用資料繫結的全部功能,並將應用程式邏輯分隔到前面所述的層中,您就可以獲得很多好處。 這只能使用 Windows 應用程式 SDK 所提供的功能來達成,而不需要使用任何外部架構。 特別是, {x:Bind} 標記延伸模組 可讓資料繫結比先前的 XAML 平臺更容易且效能更高,因此不需要先前需要的許多樣板程式碼。

如需使用基本現成 MVVM 的其他指引,請參閱 GitHub 上的 客戶訂單資料庫 UWP 範例 。 許多其他 UWP 應用程式範例 也使用基本的 MVVM 架構, 而流量應用程式 UWP 範例 包含程式碼後置和 MVVM 版本,並附有描述 MVVM 轉換的附註。

另請參閱

主題

深度資料繫結
{x:Bind} 標記延伸模組

UWP MVVM 範例

客戶訂單資料庫範例
VanArsdel 庫存範例
交通應用程式範例