WPF数据绑定

来源:互联网 发布:阿里云服务器里安装ftp 编辑:程序博客网 时间:2024/05/31 19:35

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值的方括号可选,使用方括号目的是帮助区分文本并不来自数据库或绑定数据源。
0 0
原创粉丝点击