绑定到非元素对象学习笔记

昨天学习了元素对象之间的单向绑定、双向绑定等,今天开始学习将元素绑定到非元素对象。

元素绑定到元素需使用Binding.ElementName属性指定源,而绑定到非元素对象则使用下面几个属性:

Source:该属性是指向源对象的引用-换句话说就是Object,但该Object中必须有公开的属性。

RelativeSource:使用RelativeSource对象指向源对象(编程宝典这里有单词错误)。

DataContext:在结构树中向上查找每个元素的DataContext属性,并使用第一个非空的DataContext属性。

Source属性

直接绑定算是比较简单,可以使用数据对象、资源作为绑定对象,例如:

<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

<Window.Resources>
    <FontFamily x:Key="CustomFont">Calibri</FontFamily>
</Window.Resources>
<TextBlock Text="{Binding Source={StaticResource CustomFont},Path=Source}">

第一段代码直接绑定到静态对象,第二段代码绑定到了创建的资源。

 

RelativeSource属性

这种绑定有几种不同的模式

Self:表达式绑定到同一元素的另一个属性上

FindAncestor:表达式绑定到父元素,但必须指定期望绑定的父类型

还有PreviousData、TemplateParent模式。

示例:

<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type window}}}"></TextBlock>

这段绑定表达式首先指明绑定到的属性为Title,期望的父类型为window,执行这段代码时就在当前的树形结构中逐个向上查找父元素,直到判断父元素类型为window为止,并绑定到该元素Title属性。

 

DataContext属性

这个属性我理解的也算是很透彻了,按照我的想法,在项目中维护信息时这种绑定方式应该用的比较多,举个例子:

修改员工信息的界面有好多TextBox需要绑定到员工数据对象,如果每个TextBox要写一遍绑定那是要累死的节奏,如果使用DataContext则就可以只在这些TextBox的父元素(StackPanel)中指定员工数据对象,TextBox只需指定绑定Path就可以了。

关于数据绑定的基础概念就先学习到这里了,下一步开始学习命令。

posted @ 2015-09-24 15:19  潇洒草  阅读(265)  评论(0编辑  收藏  举报