随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万

依赖属性 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更新显示。 

 

posted on   Andy Niu  阅读(1711)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2012年10月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示