2013-04-08 100 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文檔()指出:

propertyName - 屬性的檢索驗證錯誤 的名稱; 或null或Empty,以檢索實體級錯誤

另一個例子表明只是返回字典的_errors.Values。這只是所有屬性錯誤,但也不是實體錯誤。

+1

「元級」似乎是描述了一個「通用」錯誤項(不屬於特定的屬性)。這個錯誤可能與Many或All屬性有關,或者它可能屬於沒有特定屬性(可能內部狀態已損壞)。 –

回答

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]; 
}