Microsoft Windows Presentation Foundation (WPF) 具有一個豐富資料繫結系統。除了作為通過 Model-View-ViewModel (MVVM) 模式從支援邏輯和資料對 UI 定義進行鬆散耦合的關鍵推動力之外,資料繫結系統還為業務資料驗證方案提供強大而靈活的支援。WPF 中的資料繫結機制包括多個選項,可用於在建立可編輯檢視時評估輸入資料的有效性。此外,通過針對控制項的 WPF 模板和樣式功能,您可以輕鬆地自訂向使用者指示驗證錯誤的方式。
為了支援複雜規則並向使用者顯示驗證錯誤,通常需要組合使用各種可用的驗證機制。即使是看似簡單的資料輸入形式也可能在商務規則變得複雜時帶來驗證難題。常用方案涉及單個屬性層級的簡單規則以及交叉耦合屬性,在交叉耦合屬性中,一個屬性的有效性取決於另一個屬性的值。然而,通過 WPF 資料繫結中的驗證支援,可以輕鬆地解決這些難題。
在本文中,您將瞭解如何使用 IDataErrorInfo 介面實現、ValidationRules、BindingGroups、異常以及與驗證相關的附加屬性和事件來滿足資料驗證需要。您還將瞭解如何使用自己的 ErrorTemplates 和 ToolTips 來自訂驗證錯誤的顯示。在本文中,我假設您已熟悉 WPF 的基本資料繫結功能。
資料驗證概述
幾乎每當您在應用程式中輸入或修改資料時,都需要確保資料是有效,以避免與這些更改的來源(在這種情況下為使用者)相去甚遠。而且,您需要在使用者輸入的資料無效時向他們提供清晰指示,還能夠向其提供一些有關如何更正資料的指示。只要您知道需使用何種功能以及何時使用,便可通過 WPF 相當輕鬆地完成這些任務。
在使用 WPF 中的資料繫結來呈現業務資料時,通常應使用 Binding 對象在目標控制項的單個屬性與資料來源對象屬性之間提供資料管道。若要使驗證是相關的,通常需進行 TwoWay 資料繫結 — 這意味著,除了從源屬性流程向目標屬性以進行顯示的資料之外,編輯過的資料也會從目標流向源,如圖 1 所示。
圖 1 TwoWay 資料繫結中的資料流
可使用三種機制來確定通過資料繫結控制項輸入的資料是否有效。圖 2 對這些機制進行了總結。
圖 2 綁定驗證機制
驗證機制 |
說明 |
異常 |
通過在某個 Binding 對象上設定 ValidatesOnExceptions 屬性,如果在嘗試對來源物件屬性設定已修改的值的過程中引發異常,則將為該 Binding 設定驗證錯誤。 |
ValidationRules |
Binding 類具有一個用於提供 ValidationRule 衍生類別執行個體的集合的屬性。這些 ValidationRules 需要覆蓋某個 Validate 方法,該方法由 Binding 在每次繫結控制項中的資料發生更改時進行調用。如果 Validate 方法返回無效的 ValidationResult 對象,則將為該 Binding 設定驗證錯誤。 |
IDataErrorInfo |
通過在綁定資料來源對象上實現 IDataErrorInfo 介面並在 Binding 對象上設定 ValidatesOnDataErrors 屬性,Binding 將調用從綁定資料來源對象公開的 IDataErrorInfo API。如果從這些屬性調用返回非 null 或非Null 字元串,則將為該 Binding 設定驗證錯誤。 |