我试图通过DataAnnotations验证Silverlight 5应用程序中的数据。我编写了几个自定义ValidationAttributes,只要我在属性的Setter中验证,它就可以正常工作。如果用户打开数据表单,我将进行此验证并按下" save"按钮,没有对属性进行任何更改,我想验证整个对象。在这一部分,我的实施并不是预期的。我写了一个使用Validator.TryValidateObject()的方法。在结果中,我看到ValidationExceptions被抛出,但它们没有出现在UI上。有谁知道我做错了什么?我猜系统不知道抛出Exception的属性是什么?
public bool ValidateObject()
{
var validationItems = new List<ValidationResult>();
var result = new List<ValidationResult>();
Validator.TryValidateObject(this, new ValidationContext(this), result, true);
if (result.Count > 0)
{
foreach (var error in result)
{
throw new ValidationException(error.ErrorMessage = LanguageManager.Instance.GetLanguageString(error.ErrorMessage));
}
}
return result.Count != 0;
}
LanguageManager是一个以当前所选语言返回错误消息的对象。
非常感谢你的帮助。
答案 0 :(得分:0)
绑定引擎处理验证异常并将读取实现IDataErrorInfo的错误,但在这两种情况下,这只会在目标属性更改时发生。
如果要在设置操作范围之外引发验证错误,则应实现INotifyDataErrorInfo。此界面将使您能够在Click处理程序中构建错误列表。然后,为那些无效的属性引发ErrorsChanged事件,Binding引擎负责其余的事务。