C# PropertyComparisonValidatorAttribute类型的验证属性不能用于验证值
我使用的C# PropertyComparisonValidatorAttribute类型的验证属性不能用于验证值,c#,wpf,mvvm,data-annotations,C#,Wpf,Mvvm,Data Annotations,我使用的PropertyComparisonValidatorAttribute如下: [PropertyComparisonValidator("Last", ComparisonOperator.LessThan)] public int First { [...] } [PropertyComparisonValidator("First", ComparisonOperator.GreaterThan)] public i
PropertyComparisonValidatorAttribute
如下:
[PropertyComparisonValidator("Last", ComparisonOperator.LessThan)]
public int First
{
[...]
}
[PropertyComparisonValidator("First", ComparisonOperator.GreaterThan)]
public int Last
{
[...]
}
但是,当需要对其进行验证时,我得到以下异常:
类型为PropertyComparisonValidatorAttribute的验证属性不能用于验证值
我不知道还有什么其他方法可以根据一个属性的值来验证另一个属性。为了清楚起见,在我的XAML表单中,我想验证用户输入的第一个值是否小于第二个值或第二个值是否大于第一个值。在ASP.NET WebAPI中使用自定义验证属性时,我遇到了类似的问题。 可以通过在验证属性中直接定义规则集来解决此问题
public class MyClass
{
[PropertyComparisonValidator("Last", ComparisonOperator.LessThan, Ruleset="Default")]
public int First
{
[...]
}
[PropertyComparisonValidator("First", ComparisonOperator.GreaterThan, Ruleset="Default")]
public int Last
{
[...]
}
}
然后,当需要验证对象时,将规则集作为参数传递给验证方法:
MyClass target = new MyClass();
// Fill your target with data.
ValidationResults result = Microsoft.Practices.EnterpriseLibrary.Validation.Validation.Validate<MyClass>(target, "Default")
MyClass target=newmyclass();
//用数据填充你的目标。
ValidationResults=Microsoft.Practices.EnterpriseLibrary.Validation.Validation.Validate(目标,“默认”)
该属性不是来自EntLib验证块框架吗?您是否尝试过使用[Compare(“Last”)]
来代替(从DataAnnotations命名空间)?是的,您是对的。我尝试了Compare属性,但这只表明这两个属性是否相等,我想确保其中一个比另一个小@AndrewStephensI发现了一些提到相同错误(但不同的验证属性)的文章/问题。听起来DataAnnotations框架在不支持特定的验证器时抛出了这个异常(但是文章没有解释为什么它不喜欢它们)。我唯一能建议的是编写自己的自定义验证属性,例如:-谢谢@AndrewStephens,这就是我最后要做的。把它贴出来作为我问题的答案,我会把它标记为答案(我发现把你自己的答案标记为答案是肮脏的),它可以帮助其他人。