0

我正在尝试通过 DataAnnotations 验证 Silverlight 5 应用程序中的数据。我编写了几个自定义 ValidationAttributes,只要我在属性的 Setter 中进行验证,它们就可以正常工作。如果用户打开我正在执行此验证的数据表单并仅按下“保存”按钮,而不对属性进行任何更改,我想验证整个对象。在这部分,我的实现没有按预期工作。我编写了一个使用 Validator.TryValidateObject() 的方法。在结果中,我看到 ValidationExceptions 被抛出,但它们没有显示在 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;
}

LanguageManager 是一个以当前选择的语言返回错误消息的对象。

非常感谢您的帮助。

4

1 回答 1

0

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

如果你想在集合操作范围之外引发验证错误,你应该实现INotifyDataErrorInfo。此界面将使您能够在 Click 处理程序中构建错误列表。然后,您为那些无效的属性引发 ErrorsChanged 事件,而 Binding 引擎会处理其余的事情。

于 2013-02-05T06:59:31.363 回答