我对未知来源有约束力。我只有绑定。我没有其他方法来查看绑定对象。我需要找出绑定对象的Type,即使该值为null(这是我的问题所在)。
我通过绑定到一个对象来评估绑定,然后使用该对象作为获取Type的方法,但即使值为null,我也需要知道该类型。
例如,我有一个类似的课程:
public class Customer{
public string Name { get; set; }
public int Age { get; set; }
}
现在,如果我有一个WPF控件绑定到任何这些属性(让我们假设它们是依赖属性)我想获取属性的类型,即使该值为null。
所以,我有一个自定义控件,现在有一个Binding对象,例如代表{Binding Name}。如何使用C#获取“绑定对象”的类型?
答案 0 :(得分:3)
您是否愿意使用反思来访问非公开成员?如果是这样,我认为Binding
有一个名为CreateBindingExpression
的内部方法,它返回BindingExpression
,其中有一个名为_listener
的内部类型PropertyPathListener
的私有成员。这有一个名为LeafType
的内部属性,我相信你正在寻找它。
它很混乱,需要信任,并且在未来的Framework版本中可能会失败,但它可能是获得所需内容的唯一途径。
答案 1 :(得分:0)
这应该只是做事
MyCustomControl.DataContext != null ? MyCustomControl.GetType() : default(Type);
答案 2 :(得分:0)
如果值为null,则没有要获取的类型。如果绑定是App.xaml中定义的静态资源,那么你必须解析xaml文件本身以找出类型,如果它在类中定义,你必须反映它以找出类型。< / p>
如果绑定是在代码中完成的,我认为你不能这样做,因为它可以被绑定到一个你甚至无法反映出来的null局部变量(或者你可以但是可以超越我的脑袋)。如果绑定是在xaml中定义的,那么你可以理性地解析xaml并尝试按照xaml路径解析其他xaml文件并反映绑定到代码中的路径的任何属性。
这将是一个巨大的痛苦,而且我很确定无论你在这里结束的是什么,都可以通过除了尝试识别类型之外的其他事情而不用荒谬的时间来完成,即使它是空的。