2013-02-04 54 views
0

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

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

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

如果您想提出验证错误超出设置操作的范围,则应该执行INotifyDataErrorInfo。该界面将使您能够在Click处理程序中创建错误列表。然后为那些无效的属性引发一个ErrorsChanged事件,并且绑定引擎负责处理其余的部分。

+0

非常感谢!这帮助了我。我已经实现了INotifyDataErrorInfo,但忘记在控件绑定上设置ValidatesOnNotifyDataErrors = True。 感谢! – Danny