乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Silverlight實(shí)例教程 - Validation數(shù)據(jù)驗(yàn)證基礎(chǔ)屬性和事件

       krrish 2010-09-28

      上篇介紹了Silverlight的Validation數(shù)據(jù)驗(yàn)證的好處和概述,其中了解到Silverlight數(shù)據(jù)驗(yàn)證方法可以被抽象為語(yǔ)法驗(yàn)證和語(yǔ)義驗(yàn)證,其中前者是通過(guò)數(shù)據(jù)類(lèi)型定義對(duì)比驗(yàn)證,而后者是通過(guò)當(dāng)前輸入數(shù)據(jù)根據(jù)特定數(shù)據(jù)限制代碼進(jìn)行驗(yàn)證。本篇將在以上抽象方法的基礎(chǔ)上結(jié)合實(shí)例,介紹Silverlight Validation數(shù)據(jù)驗(yàn)證類(lèi)中常用屬性和方法。

       

      本篇,我們將創(chuàng)建一個(gè)新的實(shí)例項(xiàng)目,SilverlightValidationDemo

       

       

      在MainPage,創(chuàng)建簡(jiǎn)單的用戶交互界面:

       

      另外需要準(zhǔn)備一個(gè)簡(jiǎn)單的數(shù)據(jù)成員類(lèi),方便隨后的演示,

       

      在實(shí)例演示前,我們?nèi)耘f需要先學(xué)習(xí)一下Silverlight的Validation數(shù)據(jù)驗(yàn)證框架基礎(chǔ)屬性和事件,

      首先需要了解的是

       

      BindingValidationError事件

      該事件是一個(gè)路由事件,當(dāng)數(shù)據(jù)驗(yàn)證錯(cuò)誤出現(xiàn)時(shí),將綁定該錯(cuò)誤到數(shù)據(jù)源;也可以簡(jiǎn)單的理解為綁定錯(cuò)誤到數(shù)據(jù)源的一個(gè)行為。該事件可在控件本身調(diào)用,也可在其父控件中調(diào)用。例如,在TextBox中,可以聲明調(diào)用BindingValidationError,或者可以該TextBox的父容器控件Grid,StackPanel中調(diào)用BindingValidationError事件。這里需要注意的是,如果在Silverlight的MVVM設(shè)計(jì)模式下,僅在被驗(yàn)證的控件本身激活BindingValidationError事件,才能正常的被UI捕獲到錯(cuò)誤信息,不支持在父控件中對(duì)BindingValidationError事件進(jìn)行調(diào)用。

       

      為了保證Validation的靈活性,微軟同時(shí)提供了相關(guān)屬性,來(lái)控制BindingValidationError事件的調(diào)用。NotifyOnValidationError和ValidatesOnExceptions屬性。

       

      NotifyOnValidationError屬性

      該屬性的功能,是當(dāng)驗(yàn)證錯(cuò)誤出現(xiàn)時(shí)是否激活BindingValidationError事件;該屬性是Silverlight獨(dú)有的驗(yàn)證屬性之一,經(jīng)常和ValidatesOnExceptions屬性配合使用。

       

      ValidatesOnExceptions屬性

      該屬性的功能,數(shù)據(jù)綁定引擎是否捕獲顯示異常錯(cuò)誤作為驗(yàn)證錯(cuò)誤。簡(jiǎn)單的理解,在控件綁定數(shù)據(jù)時(shí),出現(xiàn)數(shù)據(jù)源異常拋出,或者數(shù)據(jù)類(lèi)型轉(zhuǎn)換時(shí)異常拋出,是否作為Validation驗(yàn)證顯示在客戶端。如果是True,則會(huì)按照Validation傳統(tǒng)的處理方式,彈出一個(gè)紅色說(shuō)明標(biāo)簽,內(nèi)容是異常錯(cuò)誤信息,反之,則不捕獲異常作為Validation。

       

      對(duì)于Silverlight開(kāi)發(fā)新手而言,初次看到以上概念,會(huì)有混淆,請(qǐng)繼續(xù)看下面實(shí)例,結(jié)合實(shí)例來(lái)理解以上的屬性和事件使用方法。

       

      首先,我們?cè)贛ainPage中,將我們起初定義的User類(lèi)添加作為一個(gè)靜態(tài)數(shù)據(jù)源,

       

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

       

       

      1 <UserControl.Resources>
      2         <local:User x:Key="UserDataContext"/>
      3 </UserControl.Resources>

       

       

      對(duì)于控件數(shù)據(jù)綁定,在Visual Studio中可以通過(guò)視圖設(shè)定,也可以直接敲入代碼設(shè)定,這里,我們使用視圖的方法,減少代碼輸入量,

      在MainPage中,選中txtUserName文本框,右鍵選擇屬性,

       

      在屬性框中,設(shè)置綁定數(shù)據(jù)源,

       

      選擇Common - DataContext,然后選擇“Apply Data Binding.." 選擇數(shù)據(jù)源

       

       

      這里,數(shù)據(jù)源可以選擇外部數(shù)據(jù)源,也可以選擇Element綁定源,我們則使用StaticResource靜態(tài)數(shù)據(jù)源,也就是我們剛才創(chuàng)建的UserDataContext,

       

       

      選中后,綁定數(shù)據(jù)源已經(jīng)完成,則需要設(shè)置控件綁定字段設(shè)置,選擇Common - Text屬性,

       

      然后選擇 Apply Data Binding...,進(jìn)入后可以看到,數(shù)據(jù)源,已經(jīng)綁定為“DataContext - User”,而數(shù)據(jù)源中的成員名稱已經(jīng)被自動(dòng)列出,

       

      我們需要指定綁定成員名稱,

       

      然后,選擇“Options”,在選項(xiàng)中,選中“NotifyOnValidationError”和“ValidatesOnExceptions”,

       

      這樣控件綁定設(shè)置已經(jīng)完成了,這時(shí),可以切換到Xaml代碼界面查看一下當(dāng)前txtUserName的代碼可以發(fā)現(xiàn),Visual Studio 2010已經(jīng)自動(dòng)生成了綁定代碼,如下:

       

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

       

       

      現(xiàn)在,我們?cè)趎ame數(shù)據(jù)成員屬性中,添加簡(jiǎn)單的判斷代碼:

       

       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 }

       

       

       

       

      這樣一個(gè)簡(jiǎn)單的Validation數(shù)據(jù)驗(yàn)證功能就完成了。

      大家可以試著將ValidatesOnExceptions=True代碼設(shè)為False,看看是否還能捕獲異常驗(yàn)證?

      下面,看看BindingValidationError事件和NotifyOnValidationError屬性的應(yīng)用,

      我們添加一個(gè)TextBlock控件,用來(lái)顯示驗(yàn)證異常信息,

       

      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">

       

       

      后臺(tái)定義:

       

       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 }

       

       

      在驗(yàn)證異常出現(xiàn)時(shí),由于NotifyOnValidationError屬性設(shè)置為T(mén)rue,所以,會(huì)執(zhí)行BindingValidationError事件,
      其中tbMessage會(huì)顯示驗(yàn)證錯(cuò)誤信息,而驗(yàn)證控件樣式也會(huì)有改變。
       
      大家可以試著將NotifyOnValidationError屬性設(shè)置為False,會(huì)發(fā)現(xiàn)BindingValidationError事件將不再執(zhí)行。
       
      今天,就講到這里了。本篇講述的兩個(gè)屬性和一個(gè)事件,是Silverlight的Validation最基礎(chǔ)的知識(shí)點(diǎn),在隨后的文章中會(huì)頻繁出現(xiàn),希望大家能夠認(rèn)真理解。
       
       
      源代碼下載地址:
       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多