依赖属性 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更新显示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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编程运行原理