WPF中的binding(三)- 使用DataContext作为Binding的数据源

前面两节介绍了通过把CLR对象指定赋值给Binding . Source或者把CLR对象的名称赋值给Binding.ElementName而实现将单个CLR对象指定为Binding的Source的方法。下面我们介绍没有Source的Binding,将DataContext作为Binding的源的方法。
DataContext,顾名思义就是数据上下文,它被定义在FrameworkElement类里,这个类是WPF控件的基类,包括所有的WPF控件和容器都含有这个属性。我们又知道,WPF的UI布局是树形结构,树的每个节点都是控件,就是说每个节点元素都有DataContext。
当一个Binding只知道自己的Path而不知道自己的Source时,它会沿着UI树一级一级的向上查找,路过每个节点时都会查看这个节点的DataContext是否具有Path所指定的属性,知道找到为止。如果到了树的根部,还没找到那就是没有Source。

为了验证这一点,我们还是先定义个Student类:

public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

然后再XAML文件中添加如下代码:


<Grid x:Name="grid">
        <Grid.DataContext>
            <local:Student Id="1" Name="Hyman" Age="29"/>
        </Grid.DataContext>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="184,59,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" 
                 Text="{Binding Path=Id}"/>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="184,105,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" 
                 Text="{Binding Path=Name}"/>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="184,160,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" 
                 Text="{Binding Path=Age}"/>
        
        
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="114,62,0,0" Name="textBlock1" Text="ID:" VerticalAlignment="Top" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="114,160,0,0" Name="textBlock2" Text="Name:êo" VerticalAlignment="Top" />
        <TextBlock Height="23" HorizontalAlignment="Left" Margin="114,105,0,0" Name="textBlock3" Text="Age:êo" VerticalAlignment="Top" />
    </Grid>
          


我们要实现的效果是在界面的三个TextBox中分别显示一个Student对象的Id、Name和Age,首先我们在Grid. DataContext中定义了一个Student对象,然后在TextBox对象中分别绑定为其依赖属性Text绑定了Id、Name和Age,此时我们没有指定Binding的Source,这样Binding就会沿着UI树在每个节点的DataContext中查找对应的Path,在在他们上层的Grid.DataContext中找到了这三个CLR属性,然后完成了显示。




另外为了实现这一效果,我们也可以在cs代码中定义一个Student对象,然后将其赋值给grid的DataContext。

 Student student = new Student()
            {
                Id = 1,
                Name = "Hyman",
                Age = 29
            };
            this.grid.DataContext = student;

      


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值