WPF数据绑定
1、元素绑定
数据绑定的最简单情形是,源对象是WPF元素而且源属性是依赖项属性。依赖项属性具有内置的更改通知支持(此处可以窥见INotifyInterface接口)。因此当源对象中更改依赖项属性的值时,会立即更新目标对象中的绑定属性。
绑定表达式:
以滑动控件和文本控件绑定为例:绑定文本控件的值FontSize值和滑动控件的Value值
<Slider Name="sliderFontSize" Minimum="1" Maximum="40" Value="10"></Slider>
<TextBlock Text="Simple Text" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize,Path=Value,Mode=TwoWay}"></TextBlock>
数据绑定表达式使用XAML标记扩展(因此具有花括号)。
Binding:由于要创建System.Windows.Data.Binding类的一个实例,所以绑定表达式以Binding开头
ElementName:属性,指示源元素。
Path:属性,指示源元素中的属性。
Delay:属性,绑定延迟,特殊情况可以在绑定中添加该属性,在等待指定时间后再更新源对象。
Mode:绑定模式。
oneWay:使用OneWay 绑定时,每当源发生变化,数据就会从源流向目标。
OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。
OneWayToSource: 绑定会将数据从目标发送到源。
TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。
Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay。(对于Default模式,依赖属性中有一个元数据-FrameworkProperty-Metadata.BindsTwoWayByDefault标志,指示是单向绑定还是双向绑定)
2、绑定到非元素对象
当绑定到非元素对象时,需要放弃Binding.ElementName属性,并使用以下属性中的一个:
Source:该属性是指向源对象的引用,即提供数据的对象。
RelativeSource:这是引用属性,也是用于指向源对象的引用。RelativeSource属性是一种特殊工具,当编写控件模板以及数据模板时非常方便(通常是因为源对象和目标对象在不同的标记块当中,比如在写模板的时候通过RelativeSource查找其他元素)。
DataContext:如果没有用Source,RelativeSource指定源,WPF就从当前元素开始在元素树中向上查找。检查每个元素的DataContext属性,并使用第一个非空的DataContext属性。
3、数据绑定
Text="{binding Path=description,TargetNullValue=[No Description Provided]}"
其中TargetNullValue值的方括号可选,使用方括号目的是帮助区分文本并不来自数据库或绑定数据源。
上一篇: ViewPager页面预加载问题