类级验证

Shi*_*mmy 3 .net validation wpf data-annotations

我正在使用DataAnnotationsutils 验证一个类.

我有一个Title有财产和Item财产的班级.我想对属性应用a RequiredAttribute,Title但只有当Item属性为null时它才应该无效; 如果Item使用对象设置属性,Title则不需要.

简而言之,我希望RequiredAttribute仅在满足类中的条件时才进行验证.

如何才能做到这一点.

更新

由于我没有找到其他方式,并且因为我通常不经常需要这个功能,所以我决定使用类级验证器进行粗略的处理.我的问题是,有没有办法手动更新UI,使标题文本框具有红框,即使其无效?

更新2
我希望类级验证器在字段上进行汇总.例如,我必须填写Cost和SalesPrice字段,我想确保SalesPrice> Cost并使SalesPrice无效,否则,我不希望在类级别上出现全局验证错误.

我喜欢以xamly的方式做到这一点.

And*_*ose 6

您可以通过为类创建自定义验证属性来完成此操作.遗憾的是,分配给属性的DataAnnotation属性无法访问父类的其他属性,因此我需要创建一个类验证器.
使用System.ComponentModel.DataAnnotations命名空间,您将需要创建继承自ValidationAttribute的自定义属性类并覆盖IsValid方法(我没有测试下面的代码,但它应该让你去):

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
sealed public class CustomAttribute: ValidationAttribute
{
  public CustomAttribute()
  {
  }

  public override bool IsValid(object value)
  {
     if(value is myClass)
     {
       return ((myClass)value).Item != null &&
         string.IsNullOrEmpty(((myClass)value).Title) ? false : true;
     }
     else return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

进一步挖掘看来,虽然交叉现场​​验证不可能开箱即用,但可以通过扩展框架来支持它.有关详细信息,请参阅此文章,希望这将添加到MVC的未来版本中.