WPF Validation Manually Adding Errors into Validation.Errors Collection
Asked Answered
C

2

14

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

Carcinoma answered 1/2, 2010 at 1:54 Comment(1)
Here is a good (a little more detailed) answer: #4274399Impatience
R
25

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);
Rhizome answered 7/9, 2010 at 17:1 Comment(0)
P
2

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);
      }
    }
Presidentship answered 29/10, 2020 at 17:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.