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);
}
}
精彩评论