【问题标题】:WPF Validation Manually Adding Errors into Validation.Errors CollectionWPF 验证手动将错误添加到 Validation.Errors 集合中
【发布时间】:2010-02-01 01:54:40
【问题描述】:

有没有办法手动/动态地将错误添加到 Validation.Errors 集合中?

【问题讨论】:

标签: wpf validation


【解决方案1】:

来自http://www.wpftutorial.net/ValidationErrorByCode.html

ValidationError validationError = new ValidationError(regexValidationRule, 
    textBox.GetBindingExpression(TextBox.TextProperty));

validationError.ErrorContent = "This is not a valid e-mail address";

Validation.MarkInvalid(
    textBox.GetBindingExpression(TextBox.TextProperty), 
    validationError);

【讨论】:

    【解决方案2】:

    jrwren 的回答引导我朝着正确的方向前进,但不太清楚 regexValidationRule 是什么以及如何清除验证错误。这是我想出的最终结果。

    我选择使用 Tag 是因为我在没有实际使用视图模型或绑定的情况下使用此手动验证。这提供了一些我可以绑定而不必担心影响视图的东西。

    在后面的代码中添加绑定:

    private void AddValidationAbility(FrameworkElement uiElement)
    {
      var binding = new Binding("TagProperty");
      binding.Source = this;
    
      uiElement.SetBinding(FrameworkElement.TagProperty, binding);
    }
    

    并在不使用 IDataError 的情况下触发验证错误:

    using System.Windows;
    using System.Windows.Controls;
    
        private void UpdateValidation(FrameworkElement control, string error)
        {
          var bindingExpression = control.GetBindingExpression(FrameworkElement.TagProperty);
    
          if (error == null)
          {
            Validation.ClearInvalid(bindingExpression);
          }
          else
          {
            var validationError = new ValidationError(new DataErrorValidationRule(), bindingExpression);
            validationError.ErrorContent = error;
            Validation.MarkInvalid(bindingExpression, validationError);
          }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多