【发布时间】:2010-02-01 01:54:40
【问题描述】:
有没有办法手动/动态地将错误添加到 Validation.Errors 集合中?
【问题讨论】:
-
这是一个很好的(更详细一点)答案:stackoverflow.com/questions/4273899/…
标签: wpf validation
有没有办法手动/动态地将错误添加到 Validation.Errors 集合中?
【问题讨论】:
标签: wpf validation
来自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 的回答引导我朝着正确的方向前进,但不太清楚 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);
}
}
【讨论】: