WPF验证手动将错误添加到Validation.Errors集合中

时间:2010-02-01 01:54:40

标签: wpf validation

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

2 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:0)

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