2013-04-08 2 views
2

Я немного смущен MSDN example.Как правильно реализовать INotifyDataErrorInfo?

Непонятно, как обрабатывать и устанавливать ошибки, связанные с реальностью.

Код в примере:

public System.Collections.IEnumerable GetErrors(string propertyName) 
{ 
    if (String.IsNullOrEmpty(propertyName) || 
     !errors.ContainsKey(propertyName)) return null; 
    return errors[propertyName]; 
} 

но документация GetErrors() гласит:

ИмениСвойства - имя свойства для получения ошибки проверки для; или null или Empty, чтобы получить ошибки уровня сущности.

В другом примере предлагается только возврат _errors.Values ​​словаря. И это всего лишь ошибки свойств, но опять же не ошибки сущности.

+1

«Entity-Level», как представляется, термин, который описывает ошибку «Generic» (не относящиеся к конкретному имущество). Эта ошибка может быть связана со многими или со всеми свойствами или может иметь отношение к определенному свойству (возможно, внутреннее состояние было повреждено). –

ответ

1

Согласно разделу «Замечания» из документации: MSDN: INotifyDataErrorInfo Interface

Этот интерфейс позволяет классам сущностей данных для реализации пользовательских правил проверки и выставить результаты проверки асинхронно. Этот интерфейс также поддерживает пользовательские объекты ошибок, несколько ошибок на одно свойство , ошибки перекрестных свойств и ошибки уровня сущности. Ошибки кросс-собственности - это ошибки, которые влияют на несколько свойств. Вы можете связать эти ошибки с одним или всеми затронутыми свойствами, или вы можете рассматривать их как ошибки уровня сущности. Ошибки уровня сущности - это ошибки , которые влияют на несколько свойств или влияют на весь объект , не затрагивая конкретное свойство.

Я могу предположить, что реализация GetErrors сильно зависит от вашей схемы обработки ошибок. Если, например, вы не собираетесь поддерживать ошибки Entity-Level, то вашего примера кода достаточно. Если, однако, вы должны поддерживать Entity-Level ошибки, то вы можете обработать условие IsNullOrEmpty отдельно:

Public IEnumerable GetErrors(String propertyName) 
{ 
    if (String.IsNullOrEmpty(propertyName)) 
     return entity_errors; 
    if (!property_errors.ContainsKey(propertyName)) 
     return null; 
    return property_errors[propertyName]; 
} 
Смежные вопросы