4

私はMSDN の例に少し混乱しています。

エンティティに関連付けられたエラーを処理および設定する方法が明確ではありません。

例のコード:

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 を返すことを提案しています。これはすべてのプロパティ エラーですが、エンティティ エラーではありません。

4

2 に答える 2

2

ドキュメントの「備考」セクションに従って: MSDN: INotifyDataErrorInfo インターフェイス

このインターフェイスにより、データ エンティティ クラスはカスタム検証ルールを実装し、検証結果を非同期的に公開できます。このインターフェイスは、カスタム エラー オブジェクト、プロパティごとの複数のエラー、プロパティ間のエラー、およびエンティティ レベルのエラーもサポートしています。クロス プロパティ エラーは、複数のプロパティに影響するエラーです。これらのエラーを、影響を受けるプロパティの 1 つまたはすべてに関連付けることも、エンティティ レベルのエラーとして扱うこともできます。エンティティ レベルのエラーは、複数のプロパティに影響するエラー、または特定のプロパティに影響を与えずにエンティティ全体に影響するエラーです。

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];
}
于 2013-06-18T07:17:40.310 に答える
1

ここで適切な答えが見つからなかったため、値が null または空の場合、すべての検証エラーが返されます。

private ConcurrentDictionary<string, List<ValidationResult>> modelErrors = new ConcurrentDictionary<string, List<ValidationResult>>();

public bool HasErrors { get => modelErrors.Any(); }

public IEnumerable GetErrors(string propertyName)
{
    if (string.IsNullOrEmpty(propertyName))
    {
        return modelErrors.Values.SelectMany(x => x);   // return all errors
    }
    modelErrors.TryGetValue(propertyName, out var propertyErrors);
    return propertyErrors;
}
于 2019-02-03T14:25:50.830 に答える