元素绑定学习笔记

WPF与传统WINFORM最大区别在于WINFORM是以事件为驱动贯穿在整个项目中,而WPF则以数据为驱动贯穿整个项目。

为了实现数据驱动模型,则必须依赖于某种特定的法则及方式,比如依赖项属性、元素绑定等。

元素绑定的前提需要依赖项属性的支持,对于依赖项属性,到目前为止我还一知半解,理解的并不透彻。

下面简要概述一下元素绑定:

元素Element,在WPF中无处不在。

绑定Binding,实现数据驱动的必须方式。

元素绑定其意为实现A元素的某个属性(目标)绑定为B元素的某个属性(源)。

示例一:

1 <Slider name="sliderFontSize" Value="10" Maximum="40" Minimum="1"></Slider>
2 <TextBlock FontSize=“{Binding ElementName=sliderFontSize,Path=Value}”>调节字体大小</TextBlock>

将TextBlock字体大小属性FontSize绑定到Slider的Value属性,那么Value属性的更改直接作用到了FontSize属性,前提Value是依赖项属性

ElementName为要绑定的元素名称,Path为该元素属性路径,这里使用路径而不用Property是因为有些属性下面有多级层次的关系,如:FontFamily.Source等,所以使用Path更准确一些。

该示例为单向绑定,即源属性的更改可自动通知目标属性,但目标属性更改后源是不知道的,为了实现双向的绑定可在目标元素中修改绑定模式。

示例二:

<Slider name="sliderFontSize" Value="10" Maximum="40" Minimum="1"></Slider>
<TextBlock FontSize=“{Binding ElementName=sliderFontSize,Path=Value,Mode=TwoWay}”>调节字体大小</TextBlock>

示例二修改了Binding对象的Mode属性,更改为TwoWay双向绑定,即使用后台代码直接修改TextBlock的FontSize属性,也会通知Slider的Value属性。

Mode属性的枚举值

OneWay:当源属性变化时更新目标属性

TwoWay:当源属性变化时更新目标属性,并且当目标属性变化时更新源属性

还有三种绑定模式:OneTime、OneWayToSource、Default

值得一提的是大多数的元素绑定当源属性值变化时会及时的更新目标属性,但也有例外,比如TextBox的Text属性,其更新方式UpdateSourceTrigger值默认为LostFocus,即当失去焦点时才更新目标属性,如果有需要,可修改Binding对象的UpdateSourceTrigger属性。

UpdateSourceTrigger枚举值

PropertyChanged:当目标属性发生变化时立即更新源

LostFocus:当目标属性发生变化并且目标丢失焦点时更新源

Explicit:除非调用BindingExpression.UpdateSource()方法,否则无法更新源

Default:根据目标属性的元数据确定更新行为

posted @ 2015-09-23 14:08  潇洒草  阅读(180)  评论(0编辑  收藏  举报