我试图找出绑定表达式的源属性类型。我想这样做是因为我想使用UpdateSourceExceptionFilter来提供比通用“无法转换”更有用的错误消息。
在.NET 4.5中,我使用ResolvedSource和ResolvedSourcePropertyName反射来获取源属性类型,如下所示:
PropertyInfo sourceProperty = expr.ResolvedSource.GetType().GetProperty(expr.ResolvedSourcePropertyName);
Type propertyType = sourceProperty.PropertyType;
这很好用。但是这两个BindingExpression属性都是在.NET 4.5中引入的,而我仍然在4.0上(因为Windows XP而无法真正更新)。
在.NET 4.0中有一个很好的方法吗?我考虑过使用反射获取内部SourceItem
和SourcePropertyName
属性,或者只使用私有Worker
获取这些值,但我宁愿避免访问内部/私有属性或字段(我认为这还需要我做一些关于信任的事情?有什么含义?)。
答案 0 :(得分:5)
不太漂亮,但无法访问私有方法:
string[] splits = expr.ParentBinding.Path.Path.Split('.');
Type type = expr.DataItem.GetType();
foreach (string split in splits) {
type = type.GetProperty(split).PropertyType;
}
因此,我们能够解析源属性。
答案 1 :(得分:0)
Here是一个独立于内部/私有.NET对象的解决方案。
从父级控件使用expr.ResolvedSource
时,属性null
为DataContext
,因此无效。
查找源类型的原因是什么?
为什么不使用简单的String.Format("Binding has exception in path {0}", expr.ParentBinding.Path.Path?? String.Empty)
?
答案 2 :(得分:0)
我在代码中使用它来查找源属性Type
User reps [2, 3, 4, 5]
User weights [7, 6, 5, 33]
Result [14, 18, 20, 165]