Подтвердить что ты не робот

В чем разница между ValidatesOnNotifyDataErrors и ValidatesOnDataErrors и NotifyOnValidationError при проверке WPF?

В проверке WPF, в чем разница между следующим:

ValidatesOnNotifyDataErrors = True

ValidatesOnDataErrors = True

NotifyOnValidationError = True

Когда вы должны использовать эти свойства правильно в XAML?

4b9b3361

Ответ 1

ValidatesOnNotifyDataErrors и ValidatesOnDataErrors используются, когда вы хотите, чтобы связанный элемент управления XAML проверял свой вход на основе интерфейса, реализованного в ViewModel/Model, для ValidatesOnNotifyDataErrors этот интерфейс INotifyDataErrorInfo, а для ValidatesOnDataErrors это IDataErrorInfo.
например, предположим, что у вас есть модель вида следующим образом:

class PersonViewModel : IDataErrorInfo {

    public string FirstName {get; set;}

    string IDataErrorInfo.Error 
    {
        return string.Empty;
    }

    string IDataErrorInfo.this[string columnName] {
        if (columnName == "FirstName" &&) {
            if (this.FirstName.Length > 20)
                return "FirstName can't be more than 20 characters.";

        }
        return string.Empty;
    }

}

а затем, по вашему мнению, у вас есть текстовое поле, связанное с свойством FirstName следующим образом: <TextBox Text={Binding Path=FirstName, ValidatesOnDataErrors=True} /> теперь, если пользователь ввел 20 символов или более в текстовое поле, будет обнаружена ошибка.

С другой стороны, NotifyOnValidationError используется, когда вы хотите, чтобы событие было поднято, когда проверка сбоя не прошла.

Я обычно использую ValidatesOnDataErrors в своих элементах управления XAML для проверки, и у меня не было необходимости в двух других, поэтому это зависит от вашей ситуации.

EDIT: Я обновляю свой ответ, поскольку я изучил некоторые новые вещи, поэтому мне нужно сделать это более актуальным.

ValidatesOnDataErrors используется в толстых клиентах, или, другими словами, когда проверка выполняется на стороне клиента, например, приложение WPF WPF или WinForm, а также объекты модели реализуют IDataErrorInfo.

С другой стороны, ValidatesOnNotifyDataErrors лучше подходит для тонких клиентов (многоуровневых приложений), таких как клиент-серверные приложения (Silverlight, WPF с WCF и т.д.), где проверка выполняется на сервере,

Таким образом, когда пользователь вводит что-то, например, в TextBox, значение отправляется на сервер асинхронно для проверки, а когда результаты проверки возвращаются, возникает событие (ErrorsChanged, то представление отображает это и отображает его с использованием соответствующего метода, конечно, в этом случае модель будет реализовывать INotifyDataErrorInfo.