从BindingExpression获取源属性类型

时间:2013-05-21 13:47:42

标签: c# .net reflection .net-4.0

我试图找出绑定表达式的源属性类型。我想这样做是因为我想使用UpdateSourceExceptionFilter来提供比通用“无法转换”更有用的错误消息。

在.NET 4.5中,我使用ResolvedSourceResolvedSourcePropertyName反射来获取源属性类型,如下所示:

PropertyInfo sourceProperty = expr.ResolvedSource.GetType().GetProperty(expr.ResolvedSourcePropertyName);
Type propertyType = sourceProperty.PropertyType;

这很好用。但是这两个BindingExpression属性都是在.NET 4.5中引入的,而我仍然在4.0上(因为Windows XP而无法真正更新)。

在.NET 4.0中有一个很好的方法吗?我考虑过使用反射获取内部SourceItemSourcePropertyName属性,或者只使用私有Worker获取这些值,但我宁愿避免访问内部/私有属性或字段(我认为这还需要我做一些关于信任的事情?有什么含义?)。

3 个答案:

答案 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时,属性nullDataContext,因此无效。

查找源类型的原因是什么?

为什么不使用简单的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]