我正在重新提出这个问题,因为它被关闭为另一个关于类似但不同的界面的问题的副本。另一个接口INotifyDataErrorInfo不一定具有相同的规则。
IDataErrorInfo.Error应该返回所有错误吗?或者它应该只返回对象级错误?
答案 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名称但它很短。