2015-01-22 4 views
3

Существует только 3 вещи внутри из INotifyDataErrorInfo:INotifyDataErrorInfo. ErrorsChanged как сделать МОФ показать ошибки собственности, как `Address.Country`

HasErrors: только для чтения логическое свойство, которое говорит, если объект в целом есть какие-либо проверки ошибки;
GetErrors: метод, который возвращает ошибки проверки для данного свойства;
ErrorsChanged: событие, которое должно быть поднято при обнаружении новых ошибок или недостатков. Вы должны поднять это событие для каждого свойства.


В демо-проекте я создаю форму, отобразить свойства объекта с именем ‘Person’. Вот как проверка с INotifyDataErrorInfo включена в Переплет:

<TextBox Text="{Binding Name,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/> 

Мы должны установить ValidatesOnNotifyDataErrors свойство true.

Затем привязка регистрируется для события ErrorsChanged связанного лица. Время Eeach, когда это событие поднято для привязанного свойства, элементы управления будут одеваться сами, чтобы отобразить ошибку. это делается, только если для параметра HasErrors установлено значение true.


Вопрос:

  1. Есть ли кто-нибудь знает более подробно aobut в ErrorsChanged event is raised for the binded property, the controls will dress itself to display an error?
  2. Если я привязываю Address.Country от Person, будет ли возбуждено событие ErrorsChanged для связанного имущества Address.Country или нет? Зачем? есть ли способ сделать это обязательным, чтобы показать ошибки?

    <TextBox Text="{Binding Address.Country,Mode=TwoWay,ValidatesOnNotifyDataErrors=True}"/>

ответ

1

Я думаю, что я могу рисковать ответ, этот вопрос уже один год.

Переплет будет зарегистрирован на событие ErrorsChanged в классе, содержащем это свойство. В этом случае адрес должен реализовать INotifyDataErrorChanged.

И вы должны поднять событие ErrorsChanged, когда вы реализуете логику проверки. После того, как вы подтвердите адрес Address.Country, вы сохраните ValidationResults (или список простых строк) и поднимите событие. Связывание получит сохраненный список ValidationResults для имени PropertyName, которому он привязан, вызвав метод GetErrors(string propertyName), который вы написали себе, реализуя интерфейс INotifyDataErrorInfo.

Если этот список не пуст, привязка установит свойство Validation.HasError в значение True, и элемент управления поднимет событие Validation.Error. Некоторые элементы управления имеют встроенное поведение, чтобы изменить их внешний вид в случае ошибки (TextBox будет иметь красную рамку вокруг своей границы). Если вы хотите показать ошибки, вы должны получить их, написав стиль в xaml. Много примеров.

Метод HasErrors используется, если вы хотите узнать, есть ли у Человека какие-либо ошибки в его Свойствах.В основном он используется в таких случаях: включение или отключение кнопки сохранения. Еще раз, вам нужно реализовать логику, используя свойство HasErrors. В основном это делается путем привязки его к элементу управления Property в xaml.