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更新显示。 

  • 相关阅读:
    linux Crontab 使用
    彻底搞懂 call() 和 apply() 方法
    (day10) 28. 实现strStr()
    (day9)357. 计算各个位数不同的数字个数
    (day7) 168. Excel表列名称
    (day6) 319. 灯泡开关
    (day5)350 两个数组的交集 II
    (day4)581.最短无序连续子数组
    day3 字符串的排列
    JS类型转换
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2742198.html
Copyright © 2011-2022 走看看