1

好的,所以我尝试创建一个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年代吗?我很沮丧。

4

2 回答 2

2

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

于 2011-01-31T15:54:38.557 回答
0

您验证作为参数获得的“值”对象。你应该知道这是什么类型的物体。为了使其更可重用并且不使用硬编码值,您可以在 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 赋值。

于 2011-01-31T15:00:32.067 回答