<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ![](https://box.kancloud.cn/2016-03-18_56eb67c868925.jpg) [上篇](http://www.cnblogs.com/jv9/admin/Silverlight實例教程%20-%20Validation數據驗證開篇)介紹了Silverlight的Validation數據驗證的好處和概述,其中了解到Silverlight數據驗證方法可以被抽象為語法驗證和語義驗證,其中前者是通過數據類型定義對比驗證,而后者是通過當前輸入數據根據特定數據限制代碼進行驗證。本篇將在以上抽象方法的基礎上結合實例,介紹Silverlight Validation數據驗證類中常用屬性和方法。 本篇,我們將創建一個新的實例項目,SilverlightValidationDemo ![](https://box.kancloud.cn/2016-03-18_56eb67cb339de.jpg) 在MainPage,創建簡單的用戶交互界面: ![](https://box.kancloud.cn/2016-03-18_56eb67cb4818f.jpg) 另外需要準備一個簡單的數據成員類,方便隨后的演示, ![](https://box.kancloud.cn/2016-03-18_56eb67cb55d3e.jpg) 在實例演示前,我們仍舊需要先學習一下Silverlight的Validation數據驗證框架基礎屬性和事件, 首先需要了解的是 [BindingValidationError](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.bindingvalidationerror(v=VS.95).aspx)事件 該事件是一個路由事件,當數據驗證錯誤出現時,將綁定該錯誤到數據源;也可以簡單的理解為綁定錯誤到數據源的一個行為。該事件可在控件本身調用,也可在其父控件中調用。例如,在TextBox中,可以聲明調用BindingValidationError,或者可以該TextBox的父容器控件Grid,StackPanel中調用BindingValidationError事件。這里需要注意的是,如果在Silverlight的MVVM設計模式下,僅在被驗證的控件本身激活BindingValidationError事件,才能正常的被UI捕獲到錯誤信息,不支持在父控件中對BindingValidationError事件進行調用。 為了保證Validation的靈活性,微軟同時提供了相關屬性,來控制BindingValidationError事件的調用。NotifyOnValidationError和ValidatesOnExceptions屬性。 [NotifyOnValidationError](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.notifyonvalidationerror(VS.95).aspx)屬性 該屬性的功能,是當驗證錯誤出現時是否激活BindingValidationError事件;該屬性是Silverlight獨有的驗證屬性之一,經常和ValidatesOnExceptions屬性配合使用。 [ValidatesOnExceptions](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validatesonexceptions(v=VS.95).aspx)屬性 該屬性的功能,數據綁定引擎是否捕獲顯示異常錯誤作為驗證錯誤。簡單的理解,在控件綁定數據時,出現數據源異常拋出,或者數據類型轉換時異常拋出,是否作為Validation驗證顯示在客戶端。如果是True,則會按照Validation傳統的處理方式,彈出一個紅色說明標簽,內容是異常錯誤信息,反之,則不捕獲異常作為Validation。 對于Silverlight開發新手而言,初次看到以上概念,會有混淆,請繼續看下面實例,結合實例來理解以上的屬性和事件使用方法。 首先,我們在MainPage中,將我們起初定義的User類添加作為一個靜態數據源, ~~~ xmlns:local="clr-namespace:SilverlightValidationDemo" ~~~ ~~~ <UserControl.Resources> ?????????<local:User?x:Key="UserDataContext"/> ?</UserControl.Resources> ~~~ 對于控件數據綁定,在Visual Studio中可以通過視圖設定,也可以直接敲入代碼設定,這里,我們使用視圖的方法,減少代碼輸入量, 在MainPage中,選中txtUserName文本框,右鍵選擇屬性, ![](https://box.kancloud.cn/2016-03-18_56eb67cb69dba.jpg) 在屬性框中,設置綁定數據源, ![](https://box.kancloud.cn/2016-03-18_56eb67cb7ad14.jpg) 選擇Common - DataContext,然后選擇“Apply Data Binding.." 選擇數據源 ![](https://box.kancloud.cn/2016-03-18_56eb67cb8cd5e.jpg) 這里,數據源可以選擇外部數據源,也可以選擇Element綁定源,我們則使用StaticResource靜態數據源,也就是我們剛才創建的UserDataContext, ![](https://box.kancloud.cn/2016-03-18_56eb67cba06ca.jpg) 選中后,綁定數據源已經完成,則需要設置控件綁定字段設置,選擇Common - Text屬性, ![](https://box.kancloud.cn/2016-03-18_56eb67cbb8da0.jpg) 然后選擇 Apply Data Binding...,進入后可以看到,數據源,已經綁定為“DataContext - User”,而數據源中的成員名稱已經被自動列出, ![](https://box.kancloud.cn/2016-03-18_56eb67cbcc638.jpg) 我們需要指定綁定成員名稱, ![](https://box.kancloud.cn/2016-03-18_56eb67cbdb36f.jpg) 然后,選擇“Options”,在選項中,選中“NotifyOnValidationError”和“ValidatesOnExceptions”, ![](https://box.kancloud.cn/2016-03-18_56eb67cbeae71.jpg) 這樣控件綁定設置已經完成了,這時,可以切換到Xaml代碼界面查看一下當前txtUserName的代碼可以發現,Visual Studio 2010已經自動生成了綁定代碼,如下: ~~~ <TextBox?x:Name="txtUserName"?Width="200"?DataContext="{Binding?Source={StaticResource?UserDataContext}}"?Text="{Binding?Path=Name,?Mode=TwoWay,?ValidatesOnExceptions=True,?NotifyOnValidationError=True}"?/> ~~~ 現在,我們在name數據成員屬性中,添加簡單的判斷代碼: ~~~ ??private?string?_name; ??public?string?Name ??{ ??????????????get?{?return?_name;?} ??????????????set? ??????????????{ ??????????????????if?(string.IsNullOrEmpty(value)) ??????????????????{ ??????????????????????throw?new?Exception("用戶名不能為空."); ?????????????????} ?????????????????_name?=?value;? ?????????????} ?} ~~~ ![](https://box.kancloud.cn/2016-03-18_56eb67cc0904a.jpg) 這樣一個簡單的Validation數據驗證功能就完成了。 大家可以試著將ValidatesOnExceptions=True代碼設為False,看看是否還能捕獲異常驗證? 下面,看看BindingValidationError事件和NotifyOnValidationError屬性的應用, 我們添加一個TextBlock控件,用來顯示驗證異常信息, ~~~ <StackPanel?Orientation="Horizontal"?> ????????<TextBlock?x:Name="tbMessage"?Margin="5"?Foreground="Red"/> </StackPanel> ~~~ 在MainPage中的LayoutRoot布局控件中,添加BindingValidationError事件, ~~~ <Grid?x:Name="LayoutRoot"?Background="White"?BindingValidationError="LayoutRoot_BindingValidationError"> ~~~ 后臺定義: ~~~ ??private?void?LayoutRoot_BindingValidationError(object?sender,?ValidationErrorEventArgs?e) ??{ ??????????????if?(e.Action?==?ValidationErrorEventAction.Added) ??????????????{ ??????????????????(e.OriginalSource?as?Control).Background?=?new?SolidColorBrush(Colors.Yellow); ??????????????????tbMessage.Text=?e.Error.Exception.Message; ??????????????} ??????????????if?(e.Action?==?ValidationErrorEventAction.Removed) ?????????????{ ?????????????????(e.OriginalSource?as?Control).Background?=?new?SolidColorBrush(Colors.White); ?????????????????tbMessage.Text?=?""; ?????????????} ?} ~~~ 在驗證異常出現時,由于NotifyOnValidationError屬性設置為True,所以,會執行BindingValidationError事件, 其中tbMessage會顯示驗證錯誤信息,而驗證控件樣式也會有改變。 ![](https://box.kancloud.cn/2016-03-18_56eb67cc1d35e.jpg) 大家可以試著將NotifyOnValidationError屬性設置為False,會發現BindingValidationError事件將不再執行。 今天,就講到這里了。本篇講述的兩個屬性和一個事件,是Silverlight的Validation最基礎的知識點,在隨后的文章中會頻繁出現,希望大家能夠認真理解。 [源代碼下載](http://www.silverlightchina.net/uploads/soft/100908/1-100ZQ44358.rar) 歡迎大家加入"專注Silverlight" 技術討論群: 32679955(六群) 23413513(五群) 32679922(四群) 100844510(三群) 37891947(二群) 22308706(一群) ?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看