WPF ValidationRule: Как узнать, что я проверяю? - PullRequest
1 голос
/ 31 января 2011

Хорошо, поэтому я попытался создать 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 ]

2 голосов
/ 31 января 2011

В качестве альтернативы вы можете использовать IDataErrorInfo при проверке данных. Вот нить об этом: Исключительная проверка данных с IDataErrorInfo с реализацией MVVM

0 голосов
/ 31 января 2011

Вы проверяете объект "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);
    }
}

, и вы можете присвоить значения Max и Min в xaml (или там, где вы создаетеПравило валидации).

...