第六章-元素绑定

1、元素简单绑定

  <StackPanel>
      <TextBlock Text="{Binding ElementName=slider, Path=Value}" Margin="10" FontSize="20"></TextBlock>

      <Slider x:Name="slider" Height="20" Width="200" Margin="50" Maximum="100" Minimum="0" VerticalAlignment="Center"></Slider>
  </StackPanel>

 

2、绑定模式

  单向绑定OneWay

  双向绑定:TwoWay

  单次绑定:OneTime(源变化一次后,目标不跟随继续变化)

  OneWayToSource:与OneWay方向相反

 

3、多绑定

 

4、绑定更新

  双向绑定时:文本框消息改变后,源要在文本框失去焦点才能更新

<StackPanel>
    <TextBox Text="{Binding ElementName=slider, Path=Value,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10" FontSize="20"></TextBox>

    <Slider x:Name="slider" Height="20" Width="200" Margin="50" Maximum="100" Minimum="0" VerticalAlignment="Center"></Slider>

    <Button Height="30" Width="50"></Button>
</StackPanel>
 UpdateSourceTrigger:

PropertyChanged:当目标属性发生变化时立即更新源
LostFocus当目标属性发生变化并且目标丢失焦点时更新源
Explicit:除非调用 BindingExpression.UpdateSource()方法,否则无法更新源
Default:根据目标属性的元数据确定更新行为(从技术角度看,是根据FrameworkPropertyMetadataDefaultUpdateSourceTrigger属性决定更新行为)。大多数属性的默认行为是PropertyChanged,但TextBox.Text属性的默认行为是LostFocus

5、绑定延迟

  加入Delay属性即可

 

6、Source属性

  指定绑定的数据对象

 <Window.Resources>
     <FontFamily x:Key="CustomFont">Calibri</FontFamily>
 </Window.Resources>
 <StackPanel>
     <!--指向一些已经准备的静态对象,为设置Binding.Source属性,需要结组静态拓展标记-->
     <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>
     
     <!--绑定资源-->
     <TextBlock Text="{Binding Source={StaticResource CustomFont},Path=Source}"></TextBlock>
 </StackPanel>

 

7、RelativeSource属性

  寻找上一级的元素,例如控件样式、数据模板当中常用

 <Grid Background="Wheat">
     <TextBlock Height="50" Width="90" 
                Background="{Binding Path=Background,
                             RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}}"></TextBlock>
 </Grid>

 

8、DataContext属性

  可以在其父元素及以上元素指定数据对象

  <StackPanel DataContext="{x:Static SystemFonts.IconFontFamily}">
      <TextBlock Text="{Binding Source}"></TextBlock>
      <TextBlock Text="{Binding LineSpacing}"></TextBlock>
      <TextBlock Text="{Binding FamilyTypefaces[0].Style}"></TextBlock>
      <TextBlock Text="{Binding  FamilyTypefaces[0].Weight}"></TextBlock>
  </StackPanel>

后台代码当中指定数据上下文DataContext

 public partial class 元素绑定 : Window
 {
     public 元素绑定()
     {
         InitializeComponent();
         this.DataContext = new Student { Name="张三",Age="17"};
     }

     class Student
     {
         public string Name {  get; set; }
         
         public string Age {  get; set; }
     }
 }
 <TextBlock Text="{Binding Name}"></TextBlock>
 <TextBlock Text="{Binding Age}"></TextBlock>

 

posted @ 2025-12-15 22:10  nonAny  阅读(1)  评论(0)    收藏  举报