概述
眾所周知,在ASP.NET應用程式中,我們可以使用驗證控制項進行資料輸入的驗證,遺憾的是在Silverlight中並沒有提供任何驗證控制項,但Silverlight對於雙向資料繫結還是提供了一些基本的資料驗證支援,我們可以在set設定器中定義驗證規則,並對於不合法資料拋出異常,最後通過捕獲驗證錯誤事件來實現資料的驗證。
本文將介紹在Silverlight應用程式中如何進行資料驗證。
準備知識
Silverlight中如下兩種情況下,將會觸發驗證錯誤:
1.在綁定引擎中執行資料轉換時拋出異常
2.在業務實體的set設定器中拋出異常
為了在驗證出錯時能夠接收到通知,我們必須要在綁定對象上設定如下兩個屬性為true:
ValidatesOnExceptions:告訴綁定引擎當有異常發生時建立一個驗證異常
NotifyOnValidationError:告訴綁定引擎當有驗證錯誤發生或者錯誤排除時觸發BindingValidationError事件
這兩個屬性都定義在Binding類中,如下代碼所示:
BindingValidationError事件定義在FrameworkElement中,通過它可以接收到ValidationErrorEventArgs類型的參數,而在ValidationErrorEventArgs中定義了一個很重要的屬性Action,它的定義如下:
這裡Added表示新增一個驗證異常,Removed表示排除了一個驗證異常。下面通過一個執行個體我們看一下如何使用它們進行資料的驗證。
執行個體
首先我們編寫一個簡單的業務類,由於資料繫結驗證只能在雙向繫結中,所以這裡需要實現INotifyPropertyChanged介面,如下代碼所示,在set設定器中我們對於資料的合法性進行檢查,如果不合法則拋出一個異常:
/// <summary>/// Author:TerryLee/// http://www.cnblogs.com/Terrylee/// </summary>public class Person : INotifyPropertyChanged{ public event PropertyChangedEventHandler PropertyChanged; private int _age; public int Age { get { return _age; } set { if (value < 0) throw new Exception("年齡輸入不合法!"); _age = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Age")); } } } private String _name = "Terry"; public String Name { get { return _name; } set { if (value.Length < 4) throw new Exception("姓名輸入不合法!"); _name = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Name")); } } } public void NotifyPropertyChanged(String propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }}
編寫資料繫結,如下代碼所示,設定NotifyOnValidationError和ValidatesOnExceptions屬性為true,並且定義BindingValidationError事件:
<!--http://www.cnblogs.com/Terrylee--><StackPanel Orientation="Horizontal" Margin="10"> <TextBox x:Name="txtName" Width="200" Height="30" Text="{Binding Name,Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" BindingValidationError="txtName_BindingValidationError"> </TextBox> <my:Message x:Name="messageName"></my:Message></StackPanel><StackPanel Orientation="Horizontal" Margin="10"> <TextBox x:Name="txtAge" Width="200" Height="30" Text="{Binding Age,Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" BindingValidationError="txtAge_BindingValidationError"> </TextBox> <my:Message x:Name="messageAge"></my:Message></StackPanel>
實現BindingValidationError事件,在這裡可以根據ValidationErrorEventAction來判斷如何進行處理,在介面給出相關的提示資訊等,如下代碼所示:
/// <summary>/// Author:TerryLee/// http://www.cnblogs.com/Terrylee/// </summary>void txtAge_BindingValidationError(object sender, ValidationErrorEventArgs e){ if (e.Action == ValidationErrorEventAction.Added) { messageAge.Text = e.Error.Exception.Message; messageAge.Validation = false; } else if (e.Action == ValidationErrorEventAction.Removed) { messageAge.Text = "年齡驗證成功"; messageAge.Validation = true; }}
好了,現在來看一下最後的驗證效果,如所示:
通過這樣的方式,我們就可以在Silverlight中對於資料輸入做驗證了。
總結
本文介紹了如何在Silverlight應用程式進行資料驗證,希望對大家有所協助。更多Silverlight 2的文章請參考Silverlight 2 相關文章匯總。