第8章 元素绑定(1)——概述、创建设置绑定和绑定到非元素对象
来源:互联网 发布:小型公司网络规划方案 编辑:程序博客网 时间:2024/06/15 14:36
一、概述
①简单地说,数据绑定就是将源对象的属性绑定到目标对象的属性。
②源对象可以是任何内容,如WPF元素、ADO.NET对象或自行创建的纯数据对象。
③数据绑定的最简单情形是元素绑定,即源对象是WPF元素而且源属性是依赖项属性。因为依赖项属性具有内置的更改通知支持。因此,当在源对象中改变依赖项属性的值时,会立即更新目标对象中的绑定属性。
二、绑定表达式
<TextBlock Margin="10" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize, Path=Value}" Text="Simple Text"></TextBlock>①绑定表达式使用XAML标记扩展(因此具有花括号)。
②绑定表达式以单词Binding开头。元素到元素的绑定需配置两个属性:ElementName属性(指示源元素)和Path属性(指示源元素中的属性)。
三、绑定错误
当指定的元素或属性不存在时,WPF不会报错,只是不能在目标属性中显示数据。
四、绑定模式
绑定模式有五种,如下图。在应用时推荐明确设置绑定模式。
五、使用代码创建绑定
①在XAML标记中使用Binding标记扩展来声明绑定表达式通常最高效。然而也可以用代码创建绑定。
Binding binding = new Binding();binding.Source = sliderFontSize;binding.Path = new PropertyPath("Value");binding.Mode = BindingMode.TwoWay;lblSampleText.SetBinding(TextBlock.FontSizeProperty, binding);②可以通过BindingOperation类的两个静态方法移除绑定。
ClearBinding()方法移除具体元素的具体依赖项属性的绑定
BindingOperations.ClearBinding(lblSampleText, TextBlock.FontSizeProperty);ClearAllBindings()方法移除具体元素的所有绑定
BindingOperations.ClearAllBindings(lblSampleText);③不管是通过代码创建的绑定,还是通过XAML标记创建的绑定,都可以使用上面两个方法删除绑定。
④通过代码创建绑定主要有以下应用场景:
A:创建动态绑定
B:删除绑定
C:创建自定义控件(为了让他人更容易地修改自定义控件的外观,需要将特定细节(如事件处理程序和数据绑定表达式)从标记移到代码中。
六、使用代码检索绑定
可使用代码检索绑定并检查其属性,而不必考虑绑定最初是用代码还是标记创建的。有两种方式:
①通过BindingOperations.GetBinding()来检索对应的Binding对象。
假如有如下绑定:
<TextBlock Margin="10" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize, Path=Value, Mode=TwoWay}" Text="Simple Text"></TextBlock>可使用以下代码获取绑定:
Binding binding = BindingOperations.GetBinding(txtBound, TextBox.TextProperty);通过绑定对象就可以查看其属性:
binding.ElementName:绑定源对象的名称
binding.Path:从绑定源对象提取的对应属性的值
binding.Path.Path:获取绑定源对象的绑定属性名称
binding.Mode:用于告知绑定何时更新目标元素
②通过BindingOperations.GetBindingExpression()方法获取更实用的BindingExpression对象
BindingExpression expression = BindingOperations.GetBindingExpression(txtBound, TextBox.TextProperty);通过BindingExpression对象可以查看如下属性:
expression.ResolvedSource:获取绑定对象的引用
expression.ResolvedSourcePropertyName:获取绑定源对象的绑定属性名称
七、绑定更新和绑定延迟
①建立绑定后源对象属性的变化会立即影响目标属性,然而,反方向的变化,即从目标到源不会立即发生。它受绑定的UpdateSourceTrigger属性控制。
②上图中列出的值不影响源到目标的更新,他仅能控制TwoWay或OneWayToSource模式中目标到源的更新。
③通过设置绑定的Delay属性可以延迟更新
<TextBox Name="txtBound" Text="{Binding ElementName=lblSampleText, Path=FontSize, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Delay=500} " Width="100"></TextBox>八、绑定到非元素对象
①绑定到非元素对象时,只需要将绑定中的ElementName属性换成以下三个属性中的一个即可:
Source:指向数据对象
RelativeSource:可根据相对于目标对象的关系指向源对象(通过该属性可将元素绑定到自身或其父元素)。多用于编写控件模版或数据模版。
DataContext:如果绑定中没有使用Source或RelativeSource属性指定源,WPF就从当前元素开始在元素树中国向上查找。检查每个元素的DataContext属性,并使用第一个非空的DataContext属性。一般用于将大量元素绑定到同一个对象。
DataContext实例代码:
<StackPanel Margin="10" DataContext="{x:Static SystemFonts.IconFontFamily}"> <TextBlock Margin="5" Text="{Binding Path=Source}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=LineSpacing}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=FamilyTypefaces[0].Style}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={x:Static SystemFonts.IconFontFamily}, Path=FamilyTypefaces[0].Weight}"></TextBlock> <TextBlock Margin="5" Text="{Binding Source={StaticResource CustomFont}, Path=Source}"></TextBlock></StackPanel>
- 第8章 元素绑定(1)——概述、创建设置绑定和绑定到非元素对象
- WPF:绑定到非元素对象
- 潘鹏整理WPF(14)绑定到非元素对象
- 绑定到元素简单例子
- 用jQuery绑定事件到动态创建的元素上
- Delphi 利用 LiveBinding 将对象绑定到界面元素
- WPF入门(三):简单绑定 - 绑定到页面元素
- jquery动态创建元素绑定事件方法
- 动态创建元素如何绑定事件
- 绑定和非绑定方法
- Binding 绑定元素
- WPF元素绑定--简单
- addEventListener 绑定元素组
- jQuery元素事件绑定
- WPF元素的绑定
- #6 绑定元素属性
- JQuery绑定元素
- JQuery 动态绑定元素
- 开发笔记
- 微信小程序,学习笔记(三)微信小计算器
- spring邮箱发送问题
- gdb调试器使用相关
- DTLS-PSK算法抓包解析
- 第8章 元素绑定(1)——概述、创建设置绑定和绑定到非元素对象
- Linux用户管理
- POJ 2774 & URAL 1517(最长公共子串)
- C#关键字using的几种用法
- 请求转发与请求重定向的区别
- mac下UML软件startUML的破解
- php查看错误日志
- Java模块 -- String字符串操作(数字,汉字,特殊符号过滤/截取)
- 堆与优先级队列——学习笔记