学习WPF——元素绑定
概念
从源对象提取一些信息,并用这些信息设置目标对象的属性
示例
|
|
数据绑定表达式使用XAML的标记扩展(因此具有花括号)(参见:)
这里创建了一个System.Windows.Data.Binding对象,所以绑定表达式以单词binding开头
在本例中只设置了Binding对象的两个属性ElementName和Path属性
ElementName
|
指定源元素
|
Path
|
指定源元素中的属性
|
Mode
|
OneWay:
当源属性变化时,更新目标属性
TwoWay:
当源属性变化时,更新目标属性,并且,当目标属性变化时,更新源属性
OneTime:
最初根据源属性值设置目标属性,其后的所有改变都会被忽略
OneWayToSource:
当目标属性变化时,更新源属性,源属性变化时,目标属性不变
Default:
根据目标属性的设置而定
|
UpdateSourceTrigger
|
如果我们把一个属性的值绑定到一个文本框的Text上,那么只有当这个文本框失去焦点时才会更新目标属性的值;如果你想实时更新目标属性的值该如何处理呢?那么这时就要设置UpdateSourceTrigger属性了,这个属性有一下几种可能的情况
PropertyChange:
当目标属性发声变化时立即更新
LostFocus:
当目标属性发生变化,并且目标失去焦点时更新
Explicit:
除非调用BindingExpression.UpdateSource()方法,否则无法更新源
Default:
根据目标属性的设置来确定更新行为,大多数元素都是PropertyChange设置,但TextBox.Text属性是LostFocus设置
|
Delay
|
有的时候需要延迟一段时间再更新目标属性的值,此时需要设置Delay属性,单位是毫秒
|
Source
|
绑定到非元素对象;与ElementName互斥 该属性指向源对象的引用(就是提供数据的对象) 以下代码可以绑定到已经存在的对象 以下代码可以绑定到已经存在的资源 |
RelativeSource
|
绑定到非元素对象;与ElementName互斥
Self:
表达式绑定到同一元素的另一属性上
FindAncestor:
表达式绑定到父元素
PreviousData:
绑定到数据列表中的前一个数据项,应用在数据列表元素中
TemplateParent:
绑定到应用模版的元素,在模版内这种设置才生效
|
说明
除了绑定到元素的属性,还可以绑定到元素的属性的属性或者存在索引器的属性
比如:
MyElement.Property.OtherProperty
MyElement.Property[2]
|
当绑定到格式不正确的元素属性上时,WPF并不会因此而编译不通过
|
双向绑定比单向绑定开销更大,OneTime绑定比双向绑定和单向绑定的开销都小
|
尽量使用明确的绑定模式,而不要使用Default绑定模式
|
源属性改变,通知到目标属性后,目标属性还可以作为源属性,通知下一个目标属性,这就是多绑定
|
使用代码创建绑定
在上面的示例中完全可以使用C#代码创建绑定
代码如下
如果像通过代码删除某一个元素的绑定,可以通过下面两种方式完成
使用代码检索绑定
可以使用如下方式获取一个元素的绑定对象
使用DataContext绑定
可以先对父元素设置DataContext属性,然后在子元素中就可以轻松的使用父元素设置的DataContext所指向的对象了
修改记录
2015-1-5:完成一部分内容
参考资料
《Pro WPF 4.5 in C# 4th Edition》
分类:
Silverlight/WPF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
2014-01-06 年终培训关于磁盘冗余阵列、热备、群集、负载均衡、云计算、F5、Nginx等的概念和基本原理
2013-01-06 【JS拾遗】函数的参数
2010-01-06 WCF随客户端软件一起发布,客户端自动识别WCF服务地址,不通过配置文件绑定WCF服务,客户端动态获取版本号