IDataErrorInfo.Errorはすべてのエラーまたはプロパティレベルのエラーだけを返しますか?

この質問は、類似しているが異なるインターフェースについての別の質問の複製として閉じられているので、私はこの質問に目を通している。もう一方のインタフェースINotifyDataErrorInfoは必ずしも同じルールを持っているとは限りません。

IDataErrorInfo.Errorはすべてのエラーを返しますか?または、オブジェクトレベルのエラーだけを返しますか?

2

1 答え

これは単なるインタフェースなので、 "Error"の値を返す必要があるかどうかは、何を消費しているかによって決まります。私が言うことができる限り、WPFはErrorを呼び出すのではなく、正常に動作しますが、将来何がErrorになるかは分かります。だから私はそれが価値を返すべきだと思う。特定のオブジェクト(たとえば、ユーザーが[OK]ボタンを押したときなど)のエラーの完全なリストを取得するために、自分でそれを使用します。ヘルパーの一人として、私はコード内にこの関数を持っています:

    public static string GetErrorsFromIDataErrorInfo(IDataErrorInfo source, params string[] columns)
    {
        return columns.Select(c => source[c]).Where(e => !string.IsNullOrWhiteSpace(e))
            .FlattenToString("\r\n");
    }

Error呼び出しのデータを返すために、このように呼び出します。

    string System.ComponentModel.IDataErrorInfo.Error
    {
        get { return GT.GetErrorsFromIDataErrorInfo(this, "Code", "Name"); }
    }

唯一の欠点は、呼び出すプロパティ名を指定する必要があることですが、実際には避けることはできません。あなたは反射を使用することができますが、ErrorがWhereで呼び出されると非効率的になることがあります。

ちなみに、FlattenToStringはIEnumerableを文字列に変換するために定義した関数で、GT(一般的なツール)は汎用関数を入れたクラスです。

1
追加された