欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF数据绑定

程序员文章站 2022-06-09 15:55:54
...

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、绑定到非元素对象

在数据驱动的应用程序中,更常见的情况是创建从不可见的对象中提取数据的绑定表达式。唯一的要求是显示的信息必须存储在公有属性中。WPF数据绑定基础结构不能获取私有信息和公有字段
当绑定到非元素对象时,需要放弃Binding.ElementName属性,并使用以下属性中的一个:

Source:该属性是指向源对象的引用,即提供数据的对象。

RelativeSource:这是引用属性,也是用于指向源对象的引用。RelativeSource属性是一种特殊工具,当编写控件模板以及数据模板时非常方便(通常是因为源对象和目标对象在不同的标记块当中,比如在写模板的时候通过RelativeSource查找其他元素)。

DataContext:如果没有用Source,RelativeSource指定源,WPF就从当前元素开始在元素树中向上查找。检查每个元素的DataContext属性,并使用第一个非空的DataContext属性。

3、数据绑定

具有null值的绑定
在绑定数据的时候,有可能绑定的数据源属性值为空的情况,可通过简单值类型(数字和日期等)使用可空数据类型反应这一情况,例如decimal?替代decimal。当然,应用类型,如字符串和完整对象,总是支持null值。还可以通过绑定表达式中设置TargetNullValue属性来改变WPF对null值的处理方式。如果设置了该属性,当数据源具有null值时,将显示提供的值。
Text="{binding Path=description,TargetNullValue=[No Description Provided]}"

其中TargetNullValue值的方括号可选,使用方括号目的是帮助区分文本并不来自数据库或绑定数据源。