开发者

WPF Validation Manually Adding Errors into Validation.Errors Collection

开发者 https://www.devze.com 2022-12-18 11:29 出处:网络
Is there any way to manually/dynamically add errors to t开发者_运维问答he Validation.Errors collection? from http://www.wpftutorial.net/ValidationErrorByCode.html

Is there any way to manually/dynamically add errors to t开发者_运维问答he Validation.Errors collection?


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


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

精彩评论

暂无评论...
验证码 换一张
取 消