上篇 介 紹了Silverlight的Validation數據驗證的好處和概述,其中瞭解到Silverlight數據驗證方法可以被抽象爲語法驗證和語義驗 證,其中前者是通過數據類型定義對比驗證,而後者是通過當前輸入數據根據特定數據限制代碼進行驗證。本篇將在以上抽象方法的基礎上結合實例,介紹 Silverlight Validation數據驗證類中常用屬性和方法。
本篇,我們將創建一個新的實例項目,SilverlightValidationDemo
在MainPage,創建簡單的用戶交互界面:
另外需要準備一個簡單的數據成員類,方便隨後的演示,
在實例演示前,我們仍舊需要先學習一下Silverlight的Validation數據驗證框架基礎屬性和事件,
首先需要了解的是
該事件是一個路由事件,當數據驗證錯誤出現時,將綁定該錯誤到數據源;也可以簡單的理解爲綁定錯誤到數據源的一個行爲。該事件可在控件本身調用,也 可在其父控件中調用。例如,在TextBox中,可以聲明調用BindingValidationError,或者可以該TextBox的父容器控件 Grid,StackPanel中調用BindingValidationError事件。這裏需要注意的是,如果在Silverlight的MVVM設 計模式下,僅在被驗證的控件本身激活BindingValidationError事件,才能正常的被UI捕獲到錯誤信息,不支持在父控件中對 BindingValidationError事件進行調用。
爲了保證Validation的靈活性,微軟同時提供了相關屬性,來控制BindingValidationError事件的調用。NotifyOnValidationError和ValidatesOnExceptions屬性。
該屬性的功能,是當驗證錯誤出現時是否激活BindingValidationError事件;該屬性是Silverlight獨有的驗證屬性之一,經常和ValidatesOnExceptions屬性配合使用。
該屬性的功能,數據綁定引擎是否捕獲顯示異常錯誤作爲驗證錯誤。簡單的理解,在控件綁定數據時,出現數據源異常拋出,或者數據類型轉換時異常拋出, 是否作爲Validation驗證顯示在客戶端。如果是True,則會按照Validation傳統的處理方式,彈出一個紅色說明標籤,內容是異常錯誤信 息,反之,則不捕獲異常作爲Validation。
對於Silverlight開發新手而言,初次看到以上概念,會有混淆,請繼續看下面實例,結合實例來理解以上的屬性和事件使用方法。
首先,我們在MainPage中,將我們起初定義的User類添加作爲一個靜態數據源,
2 < local:User x:Key ="UserDataContext" />
3 </ UserControl.Resources >
對於控件數據綁定,在Visual Studio中可以通過視圖設定,也可以直接敲入代碼設定,這裏,我們使用視圖的方法,減少代碼輸入量,
在MainPage中,選中txtUserName文本框,右鍵選擇屬性,
在屬性框中,設置綁定數據源,
選擇Common - DataContext,然後選擇“Apply Data Binding.." 選擇數據源
這裏,數據源可以選擇外部數據源,也可以選擇Element綁定源,我們則使用StaticResource靜態數據源,也就是我們剛纔創建的UserDataContext,
選中後,綁定數據源已經完成,則需要設置控件綁定字段設置,選擇Common - Text屬性,
然後選擇 Apply Data Binding...,進入後可以看到,數據源,已經綁定爲“DataContext - User”,而數據源中的成員名稱已經被自動列出,
我們需要指定綁定成員名稱,
然後,選擇“Options”,在選項中,選中“NotifyOnValidationError”和“ValidatesOnExceptions”,
這樣控件綁定設置已經完成了,這時,可以切換到Xaml代碼界面查看一下當前txtUserName的代碼可以發現,Visual Studio 2010已經自動生成了綁定代碼,如下:
現在,我們在name數據成員屬性中,添加簡單的判斷代碼:
2 public string Name
3 {
4 get { return _name; }
5 set
6 {
7 if ( string .IsNullOrEmpty(value))
8 {
9 throw new Exception( " 用戶名不能爲空. " );
10 }
11 _name = value;
12 }
13 }
這樣一個簡單的Validation數據驗證功能就完成了。
大家可以試着將ValidatesOnExceptions=True代碼設爲False,看看是否還能捕獲異常驗證?
下面,看看BindingValidationError事件和NotifyOnValidationError屬性的應用,
我們添加一個TextBlock控件,用來顯示驗證異常信息,
2 < TextBlock x:Name ="tbMessage" Margin ="5" Foreground ="Red" />
3 </ StackPanel >
在MainPage中的LayoutRoot佈局控件中,添加BindingValidationError事件,
後臺定義:
2 {
3 if (e.Action == ValidationErrorEventAction.Added)
4 {
5 (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.Yellow);
6 tbMessage.Text = e.Error.Exception.Message;
7 }
8
9 if (e.Action == ValidationErrorEventAction.Removed)
10 {
11 (e.OriginalSource as Control).Background = new SolidColorBrush(Colors.White);
12 tbMessage.Text = "" ;
13 }
14 }
本文出自 “專注Silverlight ” 博客,請務必保留此出處http://kevinfan.blog.51cto.com/1037293/389291