上篇文章写了如何绑定到元素,这里介绍从不可见对象中提取数据的绑定表达式。唯一的要求是希望显示的信息必须存储在公有属性中。WPF数据绑定基础结构不能获取私有信息或公有字段。
Source属性:最简单的选择是将Source属性指向一些已经准备好了的静态对象。例如,可在代码中创建一个静态对象并使用改对象。或者,可以使用来自.NET类库的组件。
<TextBlock Text="{Binding Source={ x:Static SystemFonts.IconFontFamily} },Path=Source"/>
这个绑定表达式获取由静态属性SystemFonts.IconFontFamily提供的FontFamily对象,然后将Binding.Path属性设置为FontFamily.Source属性,该属性给出了字体家族的名称。
另一种选择是绑定到先前作为资源创建的对象。
<Window.Resources>
<FontFamily x:key="CustomFont">Calibri</FontFamily>
</Window.Resources>
<!-- 下面的TextBlock元素会绑定到该资源 -->
<TextBlock Text=" Binding Source={ StaticResource CustomFont },Path=Source "/>
DataContext属性
如果没有使用Source和RelativeSource属性指定源,WPF就从当前元素开始在元素树中向上查找,检查每个元素的DataContect属性,并使用第一个非空的DataContextt属性。
在某些情况下,会将大量元素绑定到同一个对象。
<StackPanel DataContext=" {X:Static SystemFonts.IconFontFamily} " />
<TextBlock Text=" { Binding Path=Source } "/>
当在绑定表达式中省略信息源时,WPF会检查元素的DataContext属性。如果属性值为null。WPF会继续向上在元素树中查找第一个不为null的数据上下文,找到并绑定。
注意:如果使用Source属性创建明确标识源的绑定,元素就会使用源而不会使用可能得到的数据上下文。