zoukankan      html  css  js  c++  java
  • WPF数据验证(4)——响应与获取验证错误

    前面的示例中,有关用户接受到错误的唯一指示是在违反规则的文本框周围的红色轮廓。为了提供更多信息,可以处理 Error 事件,但存储或清除错误时会引发该事件,但前提是必须确保已将 Binding.NotifyOnValidationError 属性设置为 True。

    [html] view plain copy
     
    1. <Binding Path="UnitCost" NotifyOnValidationError="True">  

    Error 事件是一个使用冒泡策略的路由事件,所以可以通过在父容器中关联事件处理程序为多个控件处理 Error 事件:
    [html] view plain copy
     
    1. <StackPanel x:Name="stackProductDetails" Validation.Error="stackProductDetails_Error">  

    事件代码:
    [csharp] view plain copy
     
    1. private void stackProductDetails_Error(object sender, ValidationErrorEventArgs e){  
    2.             if (e.Action == ValidationErrorEventAction.Added){  
    3.                 MessageBox.Show(e.Error.ErrorContent.ToString());  
    4.             }  
    5.         }  

    在某些情况下,可能希望获取当前窗口(或窗口中的给定容器)中所有未处理的列表。这项任务较简单——就是遍历元素树,测试每个元素的 Validation.HasError 属性。

    下面代码演示了一个专门查找 TextBox 对象中非法数据的示例:

    [csharp] view plain copy
     
    1. private void GetErrors(StringBuilder sb, DependencyObject obj){  
    2.             foreach (object child in LogicalTreeHelper.GetChildren(obj)){  
    3.                 TextBox element = child as TextBox;  
    4.                 if (element == null)   
    5.                     continue;  
    6.                 if (Validation.GetHasError(element)){  
    7.                     sb.Append(element.Text + " has errors: ");  
    8.                     foreach (ValidationError error in Validation.GetErrors(element)){  
    9.                         sb.Append(" " + error.ErrorContent.ToString());  
    10.                         sb.Append(" ");  
    11.                     }  
    12.                 }  
    13.             }  
    14.         }  
    15.   
    16.         private bool FromHasErrors(out string message){  
    17.             StringBuilder sb = new StringBuilder();  
    18.             GetErrors(sb, stackProductDetails);  
    19.             message = sb.ToString();  
    20.             return message != "";  
    21.         }  
    22.   
    23.         private void cmdOK_Click(object sender, RoutedEventArgs e){  
    24.             string message;  
    25.             if (FromHasErrors(out message)){  
    26.                 MessageBox.Show(message);  
    27.             }  
    28.             else{  
    29.                 // ...  
    30.             }  
    31.         }  
    32.     }  
  • 相关阅读:
    (七)微信小程序:收藏功能
    (六)微信小程序:制作新闻详情页
    (五)微信小程序:模板template
    (四)微信小程序:新闻列表渲染
    (三)微信小程序:焦点轮播图功能
    (二)微信小程序:实现页面跳转
    Docker和jenkins实现springboot自动部署
    (桥接)完美解决linux设置静态ip。
    一个简单的对任意list分页的工具-----PageUtil
    java8实战二------lambda表达式和函数式接口,简单就好
  • 原文地址:https://www.cnblogs.com/sjqq/p/8486014.html
Copyright © 2011-2022 走看看