我可以在C#/WPF中获取绑定对象的Type()(即使绑定值为null)吗?

我可以在C#/WPF中获取绑定对象的Type()(即使绑定值为null)吗?,c#,wpf,reflection,binding,eval,C#,Wpf,Reflection,Binding,Eval,我绑定到一个未知源。我只有装订。我没有其他的方法来看待这个被束缚的物体。我需要找出绑定对象的类型,即使值为null(这就是我的问题所在) 我是通过绑定到一个对象,然后使用该对象作为获取类型的方法来评估绑定的,但是我需要知道类型,即使该值为null 例如,我有一个这样的类: public class Customer{ public string Name { get; set; } public int Age { get; set; } } 现在,如果我有一个WPF控件绑定到这些属性

我绑定到一个未知源。我只有装订。我没有其他的方法来看待这个被束缚的物体。我需要找出绑定对象的类型,即使值为null(这就是我的问题所在)

我是通过绑定到一个对象,然后使用该对象作为获取类型的方法来评估绑定的,但是我需要知道类型,即使该值为null

例如,我有一个这样的类:

public class Customer{
  public string Name { get; set; }
  public int Age { get; set; }
}
现在,如果我有一个WPF控件绑定到这些属性中的任何一个(假设它们是依赖性属性),那么我希望获得属性的类型,即使该值为null


因此,我有一个自定义控件,它现在有一个绑定对象,例如表示{Binding Name}。如何使用C#获取“绑定对象”的类型?

这应该只是一个操作问题

MyCustomControl.DataContext != null ? MyCustomControl.GetType() : default(Type);

如果该值为null,则没有要获取的类型。如果绑定到App.xaml中定义的静态资源,则必须解析xaml文件本身才能找到类型,如果它是在类中定义的,则必须反映它才能找到类型

如果绑定是在代码中完成的,我不认为你能做到这一点,因为它可能绑定到一个空的局部变量,你甚至不能反映出来(或者你可以,但那将是我所无法理解的)。如果绑定是在xaml中定义的,那么可以合理地解析xaml,并尝试按照xaml路径解析其他xaml文件,并将该路径的绑定属性反映到代码中


这将是一个巨大的痛苦,我非常确定,无论你在这里的最终目标是什么,都可以在不花费荒谬时间的情况下完成,除了尝试识别类型之外,即使它是空的。

你愿意使用反射来访问非公共成员吗?如果是这样,我认为
Binding
有一个名为
CreateBindingExpression
的内部方法,该方法返回一个
BindingExpression
,它有一个名为
\u listener
的内部类型
PropertyPathListener
的私有成员。它有一个名为
LeafType
的内部属性,我相信这就是您要寻找的


它杂乱无章,需要信任,并且在未来的框架版本中可能会失败,但这可能是获得所需内容的唯一方法。

我没有DataContext。在我的评估代码的范围内,我只有一个绑定。我必须获得绑定指向的对象的类型(即使值为null),我要绑定到对象的属性。我只是想找到一种方法来访问绑定属性(或类似属性)的PropertyInfo。@Phobis:我没想到你绑定到了一个非对象的属性,问题只是你如何跟踪那个对象。从xaml跟踪它,然后为它的属性反射类型可能是可行的,但是如果绑定是在代码中定义的,那么除了边界反编译的反射之外,您可能没有其他方法来执行它..哇。。。是的,就是这样。我不打算那样做。看起来我只允许通过设置“property”字符串和“Source”对象绑定到属性。不过谢谢你!:)+1,虽然您不需要跳转来获得
BindingExpression
,但只需使用
BindingOperations.GetBindingExpression
。然而,不幸的是,从这里开始,您需要借助反射来确定源属性的类型。