代码改变世界

细说WPF数据绑定

2011-04-10 14:54  Paul Wong  阅读(865)  评论(3编辑  收藏  举报

简单的事例:

 
<Slider  Name="mySlider" Height="28" HorizontalAlignment="Left"
 Margin="33,40,0,0" VerticalAlignment="Top" Width="243" />
 <TextBlock  Name="myTextBlock" Height="23"
 HorizontalAlignment="Left" Margin="44,94,0,0" Text="TextBlock"
 FontSize="{Binding ElementName=mySlider,Path=Value}" 
VerticalAlignment="Top" Width="95" />
 
 FontSize="{Binding ElementName=mySlider,Path=Value}" 中ElementName表示源元素,Path表示源元素中的属性。
 
Binding binding = new Binding();
binding.Source = mySlider;
binding.Path = new PropertyPath("Value");
binding.Mode = BindingMode.TwoWay;
this.myTextBlock.SetBinding(TextBlock.FontSizeProperty, binding);
 

以上分别用XAML和代码实现简单的绑定,以下介绍绑定方向:

1.OneWay,当源属性变化时更新目标属性。
2.TwoWay,当源属性变化时更新目标属性并更新源属性。
3.OneTime,根据源属性设置目标属性。
4.OneWayToSource,和OneWay相似,但方向相反。
5.Default,绑定依赖于目标属性,可单双向。

绑定的发行是由Binding.UpdataSourceTrigger属性控件,包括:

1.PropertyChanged,当目标发生变化时立即更新。
2.LostFocus,当目标发生变化并失去焦点时更新。
3.Explicit,除非调用BindingExpression.UpdataSource方法,否则不更新。
4.Default,根据目标属性确定更新行为。

值得注意的是,当绑定到一个非元素对象时,要放弃Binding.ElementName属性,可以用以下之一:

1.Source,指向源对象的引用。
2.RelativeSource,使用RelativeSource对象去指向源对象的引用。
3.DataContext,没有使用Source和RelativeSource属性时,检查元素树并使用第一个 
DataContext.