IDataErrorInfo.Error应该返回所有错误还是只返回属性级错误?

时间:2011-12-18 20:34:52

标签: .net wpf

我正在重新提出这个问题,因为它被关闭为另一个关于类似但不同的界面的问题的副本。另一个接口INotifyDataErrorInfo不一定具有相同的规则。

IDataErrorInfo.Error应该返回所有错误吗?或者它应该只返回对象级错误?

1 个答案:

答案 0 :(得分:1)

这只是一个界面,所以关于它是否需要返回“错误”值的问题取决于消耗它的内容。据我所知,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");
    }

然后像这样调用它来返回错误调用的数据:

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

唯一的缺点是你需要指定要调用的属性名称,但实际上这是无法避免的。您可以使用反射,但如果在Where。

中调用Error,则可能无效 BTW,FlattenToString是我已经定义的将IEnumerable转换为字符串的函数而GT(通用工具)是我将通用函数放入的类.Crappy名称但它很短。