WPF绑定
初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。
1.绑定使用的关键字:Binding
2.为什么要?
把界面上的控件的属性和后台的变量绑定起来,达到效果:在后代修改变量,界面自动更新数据。
控件的属性必须时依赖属性或者依赖附加属性才能绑定
3.绑定表达式中常用的关键字:
Source、ElementName、DataContext、RelativeSource、Path、XPath
4.例子
既然要绑定,就会有谁绑定谁的关系,也就是绑定目标,绑定数据源,数据从哪里到哪里。
4.1界面上2个控件进行绑定:使用ElementName指定绑定目标,Path指定绑定目标的具体的属性
2个textblock,textbloc2的text属性绑定textblock1的text
上面这种绑定如果不写path呢?找不到绑定目标对象的属性,就会显示绑定目标的对象类型
绑定目标的属性也可能是一个对象,而不是一个基本类型,这时候还可以继续绑定,绑定目标属性的属性的属性,这样。
如:
textblock2的text属性绑定textblock1的text的属性的length属性
4.2控件的属性绑定一个string,list,和类对象
<TextBlock Text="{Binding Mytest}"/>
Textblock的text属性绑定一个string类型的变量Mytest,Mytest定义在主窗体的cs文件中(MainWindow.xaml.cs)
public string Mytest { get; set; } = "testvalue";
先看下结果:
这时候需要注意一下,textblock控件时在xaml中,Mytest变量是在Class1.cs中,需要指定一个datacontext,不然在xaml中找不到变量Mytest
在class1类中定义一个list
界面上控件textblock绑定到这个list,直接绑定list,会显示对象类型,可以通过下标的方式,指定绑定到list中的某个元素
Path可以省略掉,直接写属性,这都没写source,3个textblock会从datacontext去找
DataContext和resource一样,每个控件对象都有,先找自身的,然后找父对象的,最后找到window窗体的。
5.RelativeSource:PreviousData TemplatedParent Self FindAncestor
5.1 Self
绑定目标属于自己的某个属性,如,textblock的text绑定自己属性height
<TextBlock Height="36" Background="Moccasin" Text="{Binding Path=Height,RelativeSource={RelativeSource Mode=Self}}"/>
5.2 FindAncestor
绑定时,如果不知道数据源的名字,无法使用elementname,那么AncestorType可以指定从哪个控件类型找,或AncestorLevel从自己向上找父对象的层数,如果指定了AncestorType,那么AncestorLevel的层数会略过非AncestorType类型的控件
<Border Name="Border1"> <StackPanel Name="Stacpanel2"> <Border Name="Border2"> <StackPanel Name="Stacpanel1"> <Border Name="Border3"> <TextBlock Background="Red" Text="{Binding Path=Name ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Border,AncestorLevel=2}}"/> </Border> </StackPanel> </Border> </StackPanel> </Border>
6.UpdateSourceTrigger
绑定的两端,一端发生变化,什么时候或者什么情况才触发另一端变化?
4种情况:默认,属性一旦发生变化,控件失去焦点,显示(写代码手动触发)
mode:两端数据变化,是单向还是双向,还是只触发一次
7.静态对象怎么绑定?
定义:
绑定:
<!--绑定静态变量--> <TextBlock Background="DarkKhaki" Text="{Binding (local:Class2.StaticValue)}"/>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本