技巧:在Silverlight應用程式中進行資料驗證

來源:互聯網
上載者:User
概述

眾所周知,在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 相關文章匯總。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.