数据绑定(八)使用Binding的RelativeSource

简介: 原文:数据绑定(八)使用Binding的RelativeSource 当一个Binding有明确的数据来源时可以通过为Source或ElementName赋值的办法让Binding与之关联,有的时候由于不能确定Source的对象叫什么名字,但知道它与作为Binding目标的对象在UI布局上有相对关系,比如控件自己关联自己的某个数据、关联自己某级容器的数据,就要使用Binding的RelativeSource属性。
原文: 数据绑定(八)使用Binding的RelativeSource

当一个Binding有明确的数据来源时可以通过为Source或ElementName赋值的办法让Binding与之关联,有的时候由于不能确定Source的对象叫什么名字,但知道它与作为Binding目标的对象在UI布局上有相对关系,比如控件自己关联自己的某个数据、关联自己某级容器的数据,就要使用Binding的RelativeSource属性。RelativeSource属性的数据类型为RelativeSource类,通过这个类的几个静态或非静态属性可以控制它搜索相对数据源的方式。

下面这个界面是在多层布局控件中放置着一个TextBox

    <Grid x:Name="g1" Background="Red" Margin="10">
        <DockPanel x:Name="d1" Background="Orange" Margin="10">
            <Grid x:Name="g2" Background="Yellow" Margin="10">
                <DockPanel x:Name="d2" Background="LawnGreen" Margin="10">
                    <TextBox x:Name="textBox1" FontSize="24" Margin="10"></TextBox>
                </DockPanel>
            </Grid>
        </DockPanel>
    </Grid>

界面截图:



使用如下代码,将TextBox控件向外,从第一层开始寻找,找到的第一个Grid对象的Name与TextBox控件绑定

            RelativeSource rs = new RelativeSource();
            rs.Mode = RelativeSourceMode.FindAncestor;
            rs.AncestorLevel = 1;
            rs.AncestorType = typeof(Grid);

            Binding binding = new Binding();
            binding.RelativeSource = rs;
            binding.Path = new PropertyPath("Name");
            textBox1.SetBinding(TextBox.TextProperty, binding);

AncestorLevel属性指的是以Binding目标控件为起点的层级偏移量,d2的偏移量是1,g2的偏移量是2,以此类推,AncestorType属性告诉Binding寻找哪个类型的对象作为自己的源,不是这个类型的对象会被跳过


与之等价的XAML代码是

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorLevel=1, AncestorType={x:Type Grid}}, Path=Name}"


目录
相关文章
|
JavaScript API 容器
详细讲解vue中祖孙组件间的通信之使用$attrs和$listeners的方式
详细讲解vue中祖孙组件间的通信之使用$attrs和$listeners的方式
415 0
|
JavaScript
Vue基于$attrs及$listeners实现隔代通信
Vue基于$attrs及$listeners实现隔代通信
93 0
Vue基于$attrs及$listeners实现隔代通信
|
JavaScript
Vue中 $attrs、$listeners 详解及使用
Vue中 $attrs、$listeners 详解及使用
207 0
Vue中 $attrs、$listeners 详解及使用
|
Windows
ItemsControl的两种数据绑定方式
原文:ItemsControl的两种数据绑定方式      最近在学习ItemsControl这个控件的时候,查看了MSDN上面的一个例子,并且自己做了一些修改,这里主要使用了两种方式来进行相应的数据绑定,一种是使用DataContext,另外一种是直接将一个类绑定到前台,其实这两种方式原理差不多都...
1108 0
|
IDE 开发工具 Android开发
Android开发教程 - 使用Data Binding(五)数据绑定
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fragment中的使用 ...
1067 0
|
容器 C#
数据绑定(四)使用DataContext作为Binding的Source
原文:数据绑定(四)使用DataContext作为Binding的Source DataContext属性被定义在FrameworkElement类里,这个类是WPF控件的基类,这意味着所有WPF控件都具备这个属性,...
1100 0
数据绑定(十)Binding的数据转换
原文:数据绑定(十)Binding的数据转换 当Source端Path所关联的数据与Target端目标属性数据类型不一致时,需要添加数据转换器,数据转换器是一个自定义的类,这个类需要实现IValueConverter...
812 0
|
XML 数据格式
数据绑定(七)使用ObjectDataProvider对象作为Binding的Source
原文:数据绑定(七)使用ObjectDataProvider对象作为Binding的Source ObjectDataProvider就是把对象作为数据源提供给Binding,类似的还有XmlDataProvider...
815 0
数据绑定(九)Binding的数据校验
原文:数据绑定(九)Binding的数据校验 Binding用ValidationRules属性来校验数据的有效性,ValidationRules属性类型是Collection,他可以设置多个数据校验条件,Valid...
738 0
|
C#
数据绑定(二)把控件作为Binding源
原文:数据绑定(二)把控件作为Binding源 下面的代码把一个TextBox的Text属性关联在了Slider的Value属性上 效果如...
810 0