WPF学习系列之六 (元素绑定)

时间:2022-04-21 21:49:58

元素绑定
 简单地说,数据绑定是一种关系,该关系告诉WPF从一个源对象提取一些信息,并使用这些信息设置目标对象的属性。目标属性总是依赖属性,并且通常位于WPF元素中。

一.将元素绑定到一起

<Window x:Class="StudyWPF.元素绑定"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="元素绑定" Height="300" Width="300">
    <Grid>
        <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickPlacement="TopLeft"></Slider>
<TextBlock Margin="10" Text="Simple Text" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize,Path=Value}"></TextBlock>
    </Grid>
</Window>
WPF学习系列之六 (元素绑定)

这样 字体的大小就绑定了Slider的Value的内容 了

2.绑定错误

WPF不会引发异常来通知与数据绑定相关的问题。如果指定的元素或属性不存在,不会收到任何指示;反而,只是在目标属性中不能显示数据。
  但是是可以在VS 的Output 窗口中看到提示信息的。

3.绑定模式
   数据绑定的一个特性是目标会被自动更新,而不管源是被如何修改的,在这个示例中,源只能通过一种方式进行修改,但是当用一个按钮改变了Label字体大小 后再拖动Slider后Label的字体的大小 也不再改变了

4.使用代码创建绑定

Binding binding=new Binding();
binding.Source=sliderFontSize;
binding.Path=new PropertyPath("Value");
binding.Mode=BindingMode.TwoWay;
lblSampleText.SetBinding(TextBlock.FontSize,binding);
<TextBox Text="{Binding ElementName=lblSampleText, Path=FontSize, Mode=TwoWay}"></TextBox>

5.多绑定
 就是多个控件的连续绑定如下例子中,把Slider的Value值 用在TextBlock的字体大小 上,而又把TextBlock的字体 大小绑定在TextBox的Content上代码如下:
 <StackPanel>
        <Slider Name="sliderFontSize" Margin="3" Minimum="1" Maximum="100" Value="10" TickPlacement="TopLeft"></Slider>
        <TextBlock Margin="10" Text="Simple Text" Name="lblSampleText" FontSize="{Binding ElementName=sliderFontSize,Path=Value,Mode=TwoWay}"></TextBlock>
            <TextBox Margin="10" Text="{Binding ElementName=sliderFontSize, Path=Value, Mode=TwoWay}"></TextBox>

6. 绑定更新
   在上面的例子中当虽然设置的TextBox的binding。Mode是twoWay 但是当改变Textbox内容时还是不能改变TextBlock字体的大小,这是因为它的Binding.UpdateSourceTrigger属性控制的。
它的枚举值有如下:
  a。PropertyChanged 当目标属性发生变化时立即更新源。
  b。LostFocus 当目标属性发生变化并且目标丢失焦点时更新源。
  c.Explicit 除非调用BindginExpressiom.UpdateSource()方法,否则无法更新源。
  d.Default 根据目标属性的 无数据确定更新行为(从技术角度讲,是根据 FrameWorkPropertyMetadata.DefaultUpdateSourceTrigger属性决定更新行为。) 大多数属性的默认行为是PropertyChanged.但TextBox.Text属性的默认行为是LostFocus.