WPF Validation Manually Adding Errors into Validation.Errors Collection

前端 未结 2 1444
别那么骄傲
别那么骄傲 2021-02-13 17:25

Is there any way to manually/dynamically add errors to the Validation.Errors collection?

相关标签:
2条回答
  • 2021-02-13 17:44

    from 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);
    
    0 讨论(0)
  • 2021-02-13 18:03

    jrwren's answer guided me in the right direction, but wasn't very clear as to what regexValidationRule was nor how to clear the validation error. Here's the end result I came up with.

    I chose to use Tag since I was using this manual validation in a situation where I wasn't actually using a viewmodel or bindings. This gave something I could bind to without worrying about affecting the view.

    Adding a binding in code behind:

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

    and trigging a validation error on it without using 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);
          }
        }
    
    0 讨论(0)
提交回复
热议问题