WPF ValidationRule:我怎么知道我在验证什么?

时间:2011-01-31 14:44:30

标签: wpf validation validationrules

好的,所以我尝试创建ValidationRule以确保项目的设置宽度在该项目的给定范围内。这是我的尝试:

public class AdjustWidthValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        double dValue = (double)value;

        if (dValue < ??? || dValue > ???)
            return new ValidationResult(false, "Width is out of range!");

        return new ValidationResult(true, null);
    }
}

好的,现在我怎么知道我应该验证哪个元素?这似乎只支持硬编码验证规则,似乎没有任何实际使用;你需要一个上下文来验证。我不明白吗?这是针对人的年龄和场长吗?我应该提供静态状态机吗?这是1990年代的吗?我很沮丧。

2 个答案:

答案 0 :(得分:2)

作为替代方案,您可以在数据验证中使用IDataErrorInfo。 这是一个线程: Exception validating data with IDataErrorInfo with a MVVM implementation

答案 1 :(得分:0)

验证您获得的“value”对象作为参数。你应该知道这是什么类型的对象。要使其更可重用且不使用硬编码值,可以在AdjustWidthValidationRule类中定义属性,如:

public class AdjustWidthValidationRule : ValidationRule
{
    public double Max { get; set; }
    public double Min { get; set; }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        double dValue = (double)value;

        if (dValue < Min || dValue > Max)
            return new ValidationResult(false, "Width is out of range!");

        return new ValidationResult(true, null);
    }
}

并且您可以在xaml(或创建ValidationRule的位置)中为Max和Min赋值。