WPF系列教程(二十四):将元素绑定到一起,数据绑定,属性之间的Binding
项目源码
数据绑定
在窗体中放置了一个Slider控件和一个TextBlock控件:
<StackPanel Margin="5" Name="stackPannel"><Slider Name="slider1" TickPlacement="Both" Minimum="1" Maximum="40" TickFrequency="1" Margin="3" Value="10" /><TextBlock Text="This is a test text." Name="textBlock" Margin="10" FontSize="{Binding ElementName=slider1, Path=Value}"/>
StackPanel>
在TextBlock控件中绑定了Slider控件滑块所指的值,利用Binding进行绑定,ElementName是绑定的元素的名称,Path是在元素的多个属性中选择一个我们需要绑定的属性值。
调试程序,在改变滑块位置时,字体变大变小。

设置一个按钮,点击事件为设置Slider控件值为30:
private void btn1_Click(object sender, RoutedEventArgs e)
{this.slider1.Value = 30;
}

字体大小也随着源的改变而改变。
当我们修改点击事件,使得点击按钮时,目标属性修改,然而源属性不会随之改变。
private void btn1_Click(object sender, RoutedEventArgs e)
{//this.slider1.Value = 30;this.textBlock.FontSize = 30;
}

这是一个从源->目标的单向传播过程。
如果我们想把此过程设置为一个双向过程呢?
需要将Binding 对象的Mode属性修改为Mode=TwoWay,这样源属性与目标属性才会双向影响改变。

除了在XAML中设置绑定外,还可以在代码中设置绑定。

也可以实现同样的功能。但是大部分情况下都是在XAML文件中创建绑定,只有一些特殊情况,例如动态绑定,根据具体情况进行绑定,删除绑定的情况下才是用代码进行绑定。
取消绑定、删除绑定
使用BindingOperations的ClearAllBindings方法。创建一个取消绑定按钮:
private void btn2_Click(object sender, RoutedEventArgs e)
{BindingOperations.ClearAllBindings(this.textBlock);
}

按下按钮后滑块textBlock的所有绑定全部消除。
还可以对TextBlock进行多属性的绑定,以下例子绑定Foreground属性:
<TextBlock Text="This is a test text." Name="textBlock" Margin="10" Foreground ="{Binding ElementName=lstBox1, Path=SelectedItem.Tag}"/>
<ListBox Margin="3" Height="auto" Name="lstBox1" ><ListBoxItem Tag="Blue">BlueListBoxItem><ListBoxItem Tag="Pink">PinkListBoxItem><ListBoxItem Tag="SkyBlue">SkyBlueListBoxItem>
ListBox>

绑定更新
调整滑块大小,则TextBox中的数值跟着发生了变化,然而设置的Mode为TwoWay,当我们直接在TextBox中输入字体大小,却不能立即改变字体大小和滑块位置,只有当光标离开TextBox时才会发生改变。
<TextBox Margin="3" Name="textBox1" Height="30" Width="300" Text="{Binding ElementName=textBlock, Path=FontSize, Mode=TwoWay}"/>

这是因为虽然是双向的,却不是立刻反应的模式,如果需要达到目标改变,源也立即改变的目的,就需要设置Binding对象的UpdateSourceTrigger属性为UpdateSourceTrigger=PropertyChanged。这样就可以立即发生改变了。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
