Объединение DataAnnotations и IDataErrorInfo для WPF

Я пишу приложение WPF и хочу использовать аннотации к данным, чтобы указать такие вещи, как Требуемые поля, Диапазон и т. Д.

Мои классы ViewModel используют обычные INotifyPropertyChanged , и я могу достаточно легко проверить весь объект с помощью C # 4 Validator , но я также хотел бы, чтобы поля были выделены красным цветом, если они не проверяются должным образом. Я нашел это сообщение в блоге здесь (http://blogs.microsoft.co.il/blogs/tomershamam/archive/2010/10/28/wpf-data-validation-using-net-data-annotations-part-ii.aspx ), в котором говорится о том, как написать вашу базовую модель представления для реализации IDataErrorInfo и просто использовать Validator, но реализация на самом деле не компилируется, и я не могу увидеть, как она будет работать. Рассматриваемый метод следующий:

    /// <summary>
    /// Validates current instance properties using Data Annotations.
    /// </summary>
    /// <param name="propertyName">This instance property to validate.</param>
    /// <returns>Relevant error string on validation failure or <see cref="System.String.Empty"/> on validation success.</returns>
    protected virtual string OnValidate(string propertyName)
    {
        if (string.IsNullOrEmpty(propertyName))
        {
            throw new ArgumentException("Invalid property name", propertyName);
        }

        string error = string.Empty;
        var value = GetValue(propertyName);
        var results = new List<ValidationResult>(1);
        var result = Validator.TryValidateProperty(
            value,
            new ValidationContext(this, null, null)
            {
                MemberName = propertyName
            },
            results);

        if (!result)
        {
            var validationResult = results.First();
            error = validationResult.ErrorMessage;
        }

        return error;
    }

Проблема в том, что GetValue не предоставляется. Он мог бы говорить о GetValue , которое появляется, когда вы наследуете DependencyObject , но синтаксис по-прежнему не работает (ожидается, что вы передадите DependencyProperty в качестве параметра ), но я использую обычные свойства CLR с вызовом OnPropertyChanged ("MyProperty") в установщике.

Есть ли хороший способ подключить проверку к интерфейсу IDataErrorInfo ?

5
задан rene 9 February 2015 в 14:25
поделиться