Silverlight實例教程 - Validation數據驗證基礎屬性和事件

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://kevinfan.blog.51cto.com/1037293/389291

 

 

上篇 介 紹了Silverlight的Validation數據驗證的好處和概述,其中瞭解到Silverlight數據驗證方法可以被抽象爲語法驗證和語義驗 證,其中前者是通過數據類型定義對比驗證,而後者是通過當前輸入數據根據特定數據限制代碼進行驗證。本篇將在以上抽象方法的基礎上結合實例,介紹 Silverlight Validation數據驗證類中常用屬性和方法。

 

本篇,我們將創建一個新的實例項目,SilverlightValidationDemo

 

 

在MainPage,創建簡單的用戶交互界面:

 

另外需要準備一個簡單的數據成員類,方便隨後的演示,

 

在實例演示前,我們仍舊需要先學習一下Silverlight的Validation數據驗證框架基礎屬性和事件,

首先需要了解的是

 

BindingValidationError 事件

該事件是一個路由事件,當數據驗證錯誤出現時,將綁定該錯誤到數據源;也可以簡單的理解爲綁定錯誤到數據源的一個行爲。該事件可在控件本身調用,也 可在其父控件中調用。例如,在TextBox中,可以聲明調用BindingValidationError,或者可以該TextBox的父容器控件 Grid,StackPanel中調用BindingValidationError事件。這裏需要注意的是,如果在Silverlight的MVVM設 計模式下,僅在被驗證的控件本身激活BindingValidationError事件,才能正常的被UI捕獲到錯誤信息,不支持在父控件中對 BindingValidationError事件進行調用。

 

爲了保證Validation的靈活性,微軟同時提供了相關屬性,來控制BindingValidationError事件的調用。NotifyOnValidationError和ValidatesOnExceptions屬性。

 

NotifyOnValidationError 屬性

該屬性的功能,是當驗證錯誤出現時是否激活BindingValidationError事件;該屬性是Silverlight獨有的驗證屬性之一,經常和ValidatesOnExceptions屬性配合使用。

 

ValidatesOnExceptions 屬性

該屬性的功能,數據綁定引擎是否捕獲顯示異常錯誤作爲驗證錯誤。簡單的理解,在控件綁定數據時,出現數據源異常拋出,或者數據類型轉換時異常拋出, 是否作爲Validation驗證顯示在客戶端。如果是True,則會按照Validation傳統的處理方式,彈出一個紅色說明標籤,內容是異常錯誤信 息,反之,則不捕獲異常作爲Validation。

 

對於Silverlight開發新手而言,初次看到以上概念,會有混淆,請繼續看下面實例,結合實例來理解以上的屬性和事件使用方法。

 

首先,我們在MainPage中,將我們起初定義的User類添加作爲一個靜態數據源,

 

1  xmlns:local="clr-namespace:SilverlightValidationDemo"

 

 

1  < UserControl.Resources >
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已經自動生成了綁定代碼,如下:

 

1  < TextBox  x:Name ="txtUserName"  Width ="200"  DataContext =" {Binding Source={StaticResource UserDataContext}} "  Text =" {Binding Path=Name, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True} "   />

 

 

現在,我們在name數據成員屬性中,添加簡單的判斷代碼:

 

 1  private   string  _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控件,用來顯示驗證異常信息,

 

1  < StackPanel  Orientation ="Horizontal"   >
2          < TextBlock  x:Name ="tbMessage"  Margin ="5"  Foreground ="Red" />
3  </ StackPanel >

 

 

在MainPage中的LayoutRoot佈局控件中,添加BindingValidationError事件,

 

1  < Grid  x:Name ="LayoutRoot"  Background ="White"  BindingValidationError ="LayoutRoot_BindingValidationError" >

 

 

後臺定義:

 

 1  private   void  LayoutRoot_BindingValidationError( object  sender, ValidationErrorEventArgs e)
 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  }

 

 

在驗證異常出現時,由於NotifyOnValidationError屬性設置爲True,所以,會執行BindingValidationError事件,
其中tbMessage會顯示驗證錯誤信息,而驗證控件樣式也會有改變。
 
大家可以試着將NotifyOnValidationError屬性設置爲False,會發現BindingValidationError事件將不再執行。
 
今天,就講到這裏了。本篇講述的兩個屬性和一個事件,是Silverlight的Validation最基礎的知識點,在隨後的文章中會頻繁出現,希望大家能夠認真理解。
 

 

本文出自 “專注Silverlight ” 博客,請務必保留此出處http://kevinfan.blog.51cto.com/1037293/389291

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章