数据绑定
绑定表达式
<TextBlock FontSize={Binding ElementName=sliderFontSize,path=value}></TextBlock>
ElementName属性指示源元素
Path属性指示源元素中的属性,之所以使用Path而不用Property,是以问题Path可能指向属性的属性,也可能指向属性的使用的所引起。
如果希望引用附加属性,那么需要在圆括号中封装属性名称。例如,如果绑定到Grid空间中的某个元素,路径(Grid.Row)将检索放置元素的行的行号。
绑定错误
WPF不会引发异常来通知与数据绑定相关的问题。如果指定的元素或属性不存在,那么不会收到任何指示;相反,只是不能再目标属性中显示数据。
WPF输出了绑定失败细节的跟踪信息。当调试应用程序时,该信息显示在VS的Output窗口中。
绑定模式
双向传递数值:从源到目标以及从目标到源。
<TextBlock FontSize="{Binding ElementName=sliderFontSize,Path=value,Mode=TwoWay}"></TextBlock>
允许调用BindingOperations.GetBindingExpression()方法获取更实用的BindingExpression对象
BindingExpression expression=BindingOperations.GetBindingExpression(lblSampleTet,TextBlock.FontSize);
BindingExpression对象包括一些属性,用于复制Binding对象提供的信息。最有趣的是ResolvedSource属性,该属性语序计算绑定表达式并获取其结果——传递的本地数据:
slider boundObject=(Slider)expression.ResolvedSource;
string boundData=boundObject.FontSize;
绑定更新
<TextBox Text="{Binding ElementName=txtSampleText,Path=FontSize, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Name="txtFontSize"></TextBox>
要完全控制原对象的更新时机,可选择UpdateSourceTrigger.Explicit模式。可以添加Apply按钮,调用BindingExpression.UpdateSource()方法,触发立即刷新行为。
在调用BindingExpression.UpdateSource()之前,需要一种方法来获取BindingExpression对象,BindingExpression对象仅是将两项内容封装到一起的较小组装包。这两项内容时,Binding对象(通过BindingExpression.ParentBinding属性提供)和由源绑定的对象(BindingExpression.DataItem)此外,BindingExpression对象为触发立即更新绑定的一部分提供了方法:UpdateSource()和UpdateTarget()方法。
为获取BindingExpression对象,需要使用GetBindingExpression()方法,并传入具有绑定的目标属性,每个元素都从FrameworkElement基类集成了该方法。
BindingExpression binding=txtFontSize.GetBindingExpression(TextBox.TextProperty);
binding.UpdateSouce();
绑定延迟
Delay属性