日期:2014-05-17  浏览次数:20794 次

【WPF】 数据验证,定制ValidationRule,如果范围是可变的,如何做?
RT,
C# code

public class AgeRangeRule : ValidationRule
    {
        private int _min;
        private int _max;

        public AgeRangeRule()
        {
        }

        public int Min
        {
            get { return _min; }
            set { _min = value; }
        }

        public int Max
        {
            get { return _max; }
            set { _max = value; }
        }
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            int age = 0;

            try
            {
                if (((string)value).Length > 0)
                    age = Int32.Parse((String)value);
            }
            catch (Exception e)
            {
                return new ValidationResult(false, "Illegal characters or " + e.Message);
            }

            if ((age < Min) || (age > Max))
            {
                return new ValidationResult(false,
                  "Please enter an age in the range: " + Min + " - " + Max + ".");
            }
            else
            {
                return new ValidationResult(true, null);
            }
        }
    }


这个是MSDN上的示例,借用一下。
如果AgeRangeRule 的Min和Max 在运行时,受到其它参数的影响而发生变化,就是说参数的验证范围是运行时确定的,而不是创建时静态确定,应该如何做?

------解决方案--------------------
这个没有太好的办法,因为是运行时确定,所以只能是binding的时候把最大值最小值送进去,多项绑定,然后一起验证。
ValidationRule的局限