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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ![](https://box.kancloud.cn/2016-03-18_56eb67c868925.jpg) 在以往的Validation系列中,介紹了四種Silverlight驗證機制: 1. 基本異常驗證機制; 1. DataAnnotation驗證機制; 1. IDataErrorInfo客戶端同步驗證機制; 1. INotifyDataErrorInfo服務器端異步驗證機制; 在每篇的實例中,大家都能發現這幾種Silverlight Validation機制是根據異常主動觸發的驗證機制。本文將介紹另外一種常用驗證方法,該驗證方法是基于以上四種驗證機制,我們稱之為被動型觸發驗證。 **概述** 被動型觸發驗證,簡單的理解,就是當用戶交互時,通過用戶行為被動激活Validation驗證機制。簡單的例子,一個需要注冊用戶的頁面, 其表格中,沒有任何填寫數據,而初始化后,對該表格不進行驗證處理,僅當用戶點擊“注冊”按鈕后,對需要填寫的控件進行驗證判斷,這時就需要用到被動型觸發驗證。 **UpdateSourceTrigger屬性** [UpdateSourceTrigger屬性](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.updatesourcetrigger.aspx)是Validation數據驗證的重要屬性之一,該屬性主要表示數據源觸發更新的執行時間。主要運用在Binding中,例如 ~~~ <TextBox??Text="{Binding?Username,?Mode=TwoWay,?NotifyOnValidationError=True,?ValidatesOnDataErrors=True,?ValidatesOnExceptions=True,?UpdateSourceTrigger=Explicit}"/> ~~~ 通過MSDN,我們可以了解到UpdateSourceTrigger屬性有兩個值, 1. Default,該值返回目標依賴屬性的默認UpdateSourceTrigger值,多數控件返回的默認值為PropertyChanged,而Text屬性的默認值為LostFocus。 2. Explicit,如果設置UpdateSourceTrigger屬性設置為顯式方式,則需要開發人員手工調用UpdateSource方法,才能對數據源更新事件進行觸發,否則不做任何操作。 在默認情況下,UpdateSourceTrigger屬性為Default。這也就是盡管在前幾篇的實例中,在Binding中,我們沒有設置任何PropertyChanged信息,仍舊能夠觸發驗證。 當數據綁定被修改后,綁定會自動觸發UpdateSourceTrigger屬性,通過該屬性,對綁定數據源的數據成員進行驗證,如果有異常,則返回False,反之為True。 **提交數據驗證捕獲實例** 在文章開始,我們介紹了被動型觸發驗證方法,該方法在實際項目中是常用功能之一。前文提及的一個例子,注冊時,想要在用戶點擊“注冊”按鈕時對所有填寫值使用Validation功能進行判斷, 其實現方法則需要將UpdateSourceTrigger屬性設為Explicit,在后臺中,我們使用代碼控制其驗證,通過這種方法,對提交數據進行驗證捕獲操作。 下面的例程,我們仍舊使用SilverlightValidationDemo項目,如果你沒有該項目,可以到[上一篇](http://www.cnblogs.com/jv9/archive/2010/09/15/1826547.html)下載該項目源代碼, 在本例中,我們將嘗試點擊提交注冊按鈕,但是在點擊“注冊”時,對姓名,密碼和年齡進行驗證判斷。在沒有對代碼修改前,點擊“注冊”按鈕,頁面不會捕獲任何數據提交驗證, 我們將對姓名,密碼和年齡代碼進行簡單修改 ~~~ <StackPanel?Orientation="Horizontal"?Margin="5">? ????????????????<TextBlock?Text="用戶名:?"?VerticalAlignment="Center"/>? ????????????????<TextBox?x:Name="txtUserName"?Width="200"?DataContext="{Binding?Source={StaticResource?UserDataContext}}"? Text="{Binding?Path=Name,?Mode=TwoWay,?ValidatesOnExceptions=True,?NotifyOnValidationError=True,UpdateSourceTrigger=Explicit}"?/>? ????????????</StackPanel>? ????????????<StackPanel?Orientation="Horizontal"?Margin="5">? ????????????????<TextBlock?Text="密???碼:?"?VerticalAlignment="Center"/>? ????????????????<TextBox?x:Name="txtPassword"?Width="200"?DataContext="{Binding?Source={StaticResource?UserDataContext}}"? Text="{Binding?Path=password,?Mode=TwoWay,ValidatesOnExceptions=True,?NotifyOnValidationError=True,UpdateSourceTrigger=Explicit}"?/>? ????????????</StackPanel>? ????????????<StackPanel?Orientation="Horizontal"?Margin="5">? ????????????????<TextBlock?Text="年???齡:?"?VerticalAlignment="Center"/>? ????????????????<TextBox?x:Name="txtAge"?Width="200"?DataContext="{Binding?Source={StaticResource?UserDataContext}}"? Text="{Binding?Path=Age,?Mode=TwoWay,?NotifyOnValidationError=True,?ValidatesOnExceptions=True,UpdateSourceTrigger=Explicit}"?/>? ????????????</StackPanel> ~~~ 從上面代碼可以看出,我們在Binding中,添加UpdateSourceTrigger=Explicit,根據上文提示,我們必須手工對數據源進行更新觸發。 這里需要解釋一點,如果UpdateSourceTrigger=Default,當綁定模式為Twoway時,TextBox失去焦點,則會觸發數據源更新, 這一切都有Silverlight API控制,而我們設置UpdateSourceTrigger=Explicit后,則由開發人員控制。 UpdateSourceTrigger設置為Explicit后,我們需要手動調用UpdateSource,才能對數據源進行驗證。 在UpdateSource前,我們需要使用代碼獲取到綁定對象的實例。獲取綁定對象實例,需要使用到[BindingExpression類](http://msdn.microsoft.com/en-us/library/system.windows.data.bindingexpression.aspx),BindingExpression類中包含了一個綁定對象實例的所有信息。 而獲取一個BindingExpression對象,則需要使用GetBindingExpression方法,對驗證目標對象屬性進行捕獲。 例如,我們實例中的代碼: ~~~ BindingExpression?beUsername?=?txtUserName.GetBindingExpression(TextBox.TextProperty);? beUsername.UpdateSource(); ~~~ 通過txtUserName.GetBindingExpression獲取TextBox對象的TextProperty綁定屬性,然后賦值到beUsername。 然后調用UpdateSource方法,實現手工更新數據源,同時,數據源的修改,自然也就被動激活了后臺的驗證機制。 在實際項目中,僅獲取到了驗證錯誤信息,還是不夠的,頁面還是會繼續進行下一步流程代碼,而這里,我們將會使用Validation類中的方法和屬性,對驗證錯誤進行簡單的判斷, ~~~ private?void?btReg_Click(object?sender,?RoutedEventArgs?e)? {? ????BindingExpression?beUsername?=?txtUserName.GetBindingExpression(TextBox.TextProperty);? ????beUsername.UpdateSource();? ????if?(Validation.GetHasError(txtUserName))? ????????return;? } ~~~ 上面代碼,使用Validation類中的GetHasError()方法確認驗證是否有錯誤,如果有,則返回空,UI的Validation機制將會接管前臺驗證錯誤顯示,而后臺,則會忽略該點擊事件操作。 如果你想獲取跟為詳細的驗證錯誤信息提示,可以通過Validation類中的GetErrors()方法枚舉出所有被捕獲的驗證錯誤信息。 ~~~ List<ValidationError>?errors?=?new?List<ValidationError>();? foreach?(ValidationError?erroritem?in?Validation.GetErrors(txtUserName))? {? ?????errors.Add(erroritem);? } ~~~ [](http://images.cnblogs.com/cnblogs_com/jv9/WindowsLiveWriter/SilverlightValidation_A8DB/Image00701_2.jpg)![](https://box.kancloud.cn/2016-03-18_56eb67cdaba11.jpg) 最終注冊提交代碼如下: ~~~ ????????private?void?btReg_Click(object?sender,?RoutedEventArgs?e) ????????{ ????????????BindingExpression?beUsername?=?txtUserName.GetBindingExpression(TextBox.TextProperty); ????????????beUsername.UpdateSource(); ????????????BindingExpression?bePassword?=?txtPassword.GetBindingExpression(TextBox.TextProperty); ????????????bePassword.UpdateSource(); ????????????BindingExpression?beAge?=?txtAge.GetBindingExpression(TextBox.TextProperty); ????????????beAge.UpdateSource(); ????????????if?(Validation.GetHasError(txtUserName)) ????????????????return; ????????????if?(Validation.GetHasError(txtPassword)) ????????????????return; ????????????if?(Validation.GetHasError(txtAge)) ????????????????return; //捕獲驗證錯誤集合演示 ????????????List<ValidationError>?errors?=?new?List<ValidationError>(); ????????????foreach?(ValidationError?erroritem?in?Validation.GetErrors(txtUserName)) ????????????{ ????????????????errors.Add(erroritem); ????????????} ????????} ~~~ 其結果,點擊“注冊”按鈕,則會提示驗證錯誤,修改內容后,再次點擊“注冊”按鈕,驗證通過后,進入注冊流程。 ![](https://box.kancloud.cn/2016-03-18_56eb67cdbebae.jpg) ? 最后需要說明一點,這種驗證方法,和驗證機制是無關的,無論使用哪一種驗證機制,都可以使用該方法,進行用戶交互數據驗證。 今天就介紹到這里,希望對大家有所幫助。 [源代碼下載](http://www.silverlightchina.net/uploads/soft/100920/1-100920133156.rar) 歡迎大家加入“專注Silverlight”QQ技術群,目前,1-6群都已經滿員,新開500人七群,歡迎大家加入一起學習討論Silverlight&WPF開發技術。 22308706(一群) 超級群500人滿 37891947(二群) 超級群500人滿 100844510(三群) 高級群200人滿 32679922(四群) 超級群500人滿 23413513(五群) 高級群200人滿 32679955(六群) 超級群500人滿 61267622(七群 推薦) 超級群500人未滿
                  <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>

                              哎呀哎呀视频在线观看