c# - 类型为PropertyComparisonValidatorAttribute的验证属性不能用于验证值

标签 c# wpf mvvm data-annotations

我正在这样使用PropertyComparisonValidatorAttribute:

    [PropertyComparisonValidator("Last", ComparisonOperator.LessThan)]
    public int First
    {
        [...]
    }

    [PropertyComparisonValidator("First", ComparisonOperator.GreaterThan)]
    public int Last
    {
       [...]
    }

但是,当需要对其进行验证时,出现以下异常:
A validation attribute of type PropertyComparisonValidatorAttribute cannot be used to validate values
我不知道有任何其他方法可以根据另一个属性的值来验证一个属性。明确地说,在我的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")

关于c# - 类型为PropertyComparisonValidatorAttribute的验证属性不能用于验证值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22692103/

相关文章:

c# - 如何仅使用 Designer 文件重建 WinForm

c# - NUnit 嵌套集合比较

C# WPF DatePicker 绑定(bind)

wpf - Viewmodel 的多个实例

WPF - 如何在 ListView 中使用当前选定项更新文本框?使用 MVVM!

.net - WPF MenuItem ViewModel 命令

wpf - 使用mvvm实现点击事件

c# - clsObject.Method() 和 new Class().Method() 的区别?

c# - 如果禁用 native 代码调试,调用外部函数时 vshost32-clr2.exe 会挂起

wpf - 绑定(bind) OnwayToSource 未按预期工作 - 有什么替代方案?