TryValidateObject 未显示错误

本文关键字:错误 显示 TryValidateObject | 更新日期: 2023-09-27 17:57:23

我正在尝试通过DataAnnotations验证Silverlight 5应用程序中的数据。我编写了几个自定义验证属性,只要我在属性的 Setter 中进行验证,它们就可以正常工作。如果用户打开我正在执行此验证的数据表单,并且只按"保存"按钮,而不对属性进行任何更改,则我想验证整个对象。在这一部分,我的实现没有按预期工作。我写了一个使用 Validator.TryValidateObject() 的方法。在结果中,我看到验证异常被抛出,但它们没有显示在 UI 上。有人知道我做错了什么吗?我猜系统不知道异常是在哪个属性上抛出的?

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;
}
语言

管理器是一个对象,它以当前选定的语言返回错误消息。

非常感谢您的帮助。

TryValidateObject 未显示错误

绑定引擎处理验证异常,并将读取实现 IDataErrorInfo 的错误,但在这两种情况下,这只会在目标属性更改时发生。

如果要在设置操作的范围之外引发验证错误,则应实现 INotifyDataErrorInfo。此接口将使您能够在 Click 处理程序中构建错误列表。然后,为那些无效的属性引发 ErrorsChanged 事件,绑定引擎将负责其余的工作。