zoukankan      html  css  js  c++  java
  • 依赖属性 DependencyProperty

    解决的问题:一个控件可能有几百个CLR属性,如果每个CLR属性都是包装一个字段,那么这个控件耗费的内存太大了。依赖属性就是解决这个问题的。

    如何解决这个问题:使控件的CLR属性不是包装字段,而是包装一个DependencyProperty,并且这个DependencyProperty的内存不是分配在控件内,而是采用某种机制分配在外部,以key-value的形式存在。另外,DependencyProperty还解决了一个问题,当DependencyProperty作为绑定源的时候,还能自动更新绑定目标的显示。


    依赖属性的理解:

    1、依赖属性就是可以自己没有值,通过binding 从数据源获得值的属性,也就是依赖在别人身上的属性。

    2、只有依赖属性可以binding到别人身上,CLR属性不能binding到别人身上。

    3、那为什么在XAML代码中会有如下的情况?

      <TextBox Name="textBox2" Text="{Binding ElementName=textBox1,Path=Text}"/>

        就是把textBox2的CLR属性Text绑定到别人身上,这只是表面现象。实际上,上面的XAML等价的C#代码为:

        this.textBox2.SetBinding(TextBox.TextProperty, new Binding("Text") { ElementName="textBox1"});

        SetBinding的方法定义为 :SetBinding(DependencyProperty dp, BindingBase binding);

    4、有没有包装器,依赖属性都存在。那为什么还要使用CLR属性对依赖属性包装?

        上面讨论的是依赖属性binding到别人身上,假如别人binding到依赖属性上,该怎么办呢? CLR属性包装器的作用就是:以“实例属性”的形式向外界暴露依赖属性,这样依赖属性就能成为数据源的Path。需要特别注意的是,当数据源的Path为依赖属性,会自动通知Target更新显示。 

  • 相关阅读:
    都不敢上CSDN了
    什么是函数(function)?
    今天3/8妇女节
    一件有意思的事情:关于std::string和std::auto_ptr
    转两篇Link相关的文章
    DevIL Downloads
    状态模式(State Pattern)
    访问者模式(Visitor Pattern)
    羊皮卷的故事第二章
    备忘录模式(Memento Pattern)
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2742198.html
Copyright © 2011-2022 走看看