В проверке WPF, в чем разница между следующим:
ValidatesOnNotifyDataErrors = True
ValidatesOnDataErrors = True
NotifyOnValidationError = True
Когда вы должны использовать эти свойства правильно в XAML?
В проверке WPF, в чем разница между следующим:
ValidatesOnNotifyDataErrors = True
ValidatesOnDataErrors = True
NotifyOnValidationError = True
Когда вы должны использовать эти свойства правильно в XAML?
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
.
Надеюсь, это поможет вам: