数据绑定使用DataContext作为Binding的Source

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据绑定使用DataContext作为Binding的Source相关的知识,希望对你有一定的参考价值。

原文:数据绑定(四)使用DataContext作为Binding的Source

DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件都具备这个属性,当一个Binding只知道自己的Path而不知道自己的Source时,它会沿着UI元素树一路向输的根部找过去,没路过一个节点,就看看这个节点的DataContext有没有指定的Path,如果有,就把这个对象作为自己的Source,看看例子,首先定义一个类

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

XAML如下:

    <StackPanel>
        <StackPanel.DataContext>
            <local:Student Id="10001" Name="daijun" Age="20" />
        </StackPanel.DataContext>
        <TextBlock Background="LightBlue" Text="{Binding Path=Id}"></TextBlock>
        <TextBlock Background="LightBlue" Text="{Binding Path=Name}"></TextBlock>
        <TextBlock Background="LightBlue" Text="{Binding Path=Age}"></TextBlock>
    </StackPanel>

运行效果如下:

技术分享图片

实际上DataContext对象是一个依赖属性,依赖属性有个重要特点就是当没有为控件的某个依赖属性显示赋值时,控件会把自己容器的属性值当作自己的属性值,所以实际上,属性值是沿着UI元素树向下传递了




以上是关于数据绑定使用DataContext作为Binding的Source的主要内容,如果未能解决你的问题,请参考以下文章

绑定与x:绑定,使用StaticResource作为默认值以及它们在DataContext中的差异

为啥在 XAML 中绑定 MainWindow 数据上下文与使用 this.datacontext=this 在代码隐藏中绑定的行为不同?

C# WPF 数据绑定DataContext;Window_Loaded时进行过数据绑定,指定DataContext;触发另一事件?

UWP 数据绑定:如何将按钮命令设置为 DataTemplate 中的父 DataContext

ListBox 内的 DataContext ComboBox 绑定

Binding使用的属性DataContext上下文绑定必须使用的情况