代码之家  ›  专栏  ›  技术社区  ›  Phobis

我可以在c/wpf中获取绑定对象的type()(即使绑定值为空)?

  •  3
  • Phobis  · 技术社区  · 15 年前

    我有一个与未知来源的绑定。我所拥有的只是装订。我没有其他方法来观察这个绑定对象。我需要找出绑定对象的类型,即使值为空(这就是我的问题所在)。

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

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

    public class Customer{
      public string Name { get; set; }
      public int Age { get; set; }
    }
    

    现在,如果我有一个WPF控件绑定到这些属性中的任何一个(假设它们是依赖属性),我想获取属性的类型,即使值为空。

    所以,我有一个自定义控件,它现在有一个表示绑定名称的绑定对象。如何使用c_获得“绑定对象”的类型?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Gabe Timothy Khouri    15 年前

    您是否愿意使用反射访问非公共成员?如果是这样的话,我想 Binding 有一个内部方法调用 CreateBindingExpression 返回一个 BindingExpression ,其中有一个名为 _listener 内部类型 PropertyPathListener . 内部属性名为 LeafType 我相信这就是你要找的。

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

        2
  •  0
  •   Steve Danner    15 年前

    这应该只是个问题

    MyCustomControl.DataContext != null ? MyCustomControl.GetType() : default(Type);
    
        3
  •  0
  •   Jimmy Hoffa    15 年前

    如果值为空,则没有要获取的类型。如果绑定到app.xaml中定义的静态资源,则必须逐字分析xaml文件本身以找出该类型;如果该类型是在类中定义的,则必须反映该文件才能找到该类型。

    如果绑定是在代码中完成的,我认为您不能这样做,因为它可能绑定到一个空的局部变量,您甚至无法反映出来(或者您可以这样做,但这将远远超出我的想象)。如果绑定是在XAML中定义的,则可以合理地解析XAML,并尝试按照XAML路径解析其他XAML文件,并将该路径的绑定的任何属性反射到代码中。

    这将是一个巨大的痛苦,我很确定无论你的最终目标是什么,都可以在没有荒谬时间的情况下完成,这需要做一些事情,而不是尝试识别类型,即使它是空的。