书上写着:Binding的源也就是数据的源头。Binding对于源的要求很简单-只要他是一个对象!并且通过属性(Property)公开自己的数据,它就可以作为Binding的源了。就像上一篇我写的那个Student类,它的实例对象就可以作为Binding的源,数据的内容是它的属性Name。

实际使用过程中,我们可以把控件自己或者控件的子级元素或者控件的自己的容器当成源,一个控件作为另一个控件的源,集合作为ItemsControl的数据源,XML、作为TreeView或者menu的数据源,把多个控件关联到一个数据制高点,甚至干脆不给Binding指定数据源,让它自己去找。

当我们遇到这样一种情况,通过一个滚动条来控制TextBox显示的值,当TextBox的值改变滚动条跳到对应的位置去,这个模型很常见,那么我们自己写一个这样的功能的时候会怎样做呢?方法当然很多,比如通过触发两个控件的Changed事件来操作等等,那我们既然在学习Binding,就是用它来解决这个问题。

滚动条Slider是用来控制显示的值,所以它的Value是一个Binding的源,TextBox的Text属性则是这个源的目标。

代码如下:

<Window x:Class="Wpf_test1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="" Width="">
<StackPanel>
<TextBox x:Name="textbox1" Text="{Binding Path=Value, ElementName=Slider1}" BorderBrush="Black"></TextBox>
<Slider x:Name="Slider1" Maximum="" Minimum=""></Slider>
</StackPanel>
</Window>

Maximum和Minimum是指定Value的范围,注意TextBox的Text=“{Binding Path=Value, ElementName=Slider1}”和我们平常写的Text=“value”不同,它的意思是把Slider的Value值Binding给TextBox的Text去。

执行结果:

当我们在TextBox里面输入一个数字,如何让Slider跳到相应位置去呢?

很简单,在Binding之后加上 UpdateSourceTrigger=PropertyChanged,当源的目标发生改变,更新源数据!是不是很方便。

有人可能会这样写:

 <TextBox x:Name="textbox1" Text="{Binding Value, ElementName=Slider1, UpdateSourceTrigger=PropertyChanged}" BorderBrush="Black"></TextBox>

没有写Path也是对的,因为Binding构造器本身可以接受Path作为参数。

按照上一篇最后的方法,XAML这一句Binding在后台可以写成如下:

this.textbox1.SetBinding(TextBox.TextProperty,new Binding("Value"){ElementName="Slider1"})

说到这里,不得不说说Path=Value这句话,Binding源的对象可能有许多属性,而Path正是决定了Binding关心的是哪一个属性。实际上Path所对应的是一个叫做PropertyPath的类型,比如Text.Length、Text.[2]等。

当Binding的源是一个集合或者DataView的时候,如果我们把它的默认元素当成Path的话。。。可以使用多级/语法,自己去MSDN看吧~

Binding的源和路径的更多相关文章

  1. Binding的Path(路径)

    Binding的源可以是控件(一个控件是另一个控件的Source.控件把自己的容器作为Source),把集合作为ItemsControls的Source,把xml作为Tree或者Menu的Source ...

  2. 获得数据源和路径desc.catalogPath

    workspace:C:\Users\dell\Documents\ArcGIS\Default.gdb\ddf inPath:c:\users\dell\documents\arcgis\defau ...

  3. WPF之Binding深入探讨

    原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...

  4. WPF的Binding功能解析

    1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...

  5. WPF之Binding的使用

    引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...

  6. WPF之Binding深入探讨--Darren

    1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...

  7. 深入浅出WPF之Binding的使用(一)

    在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象:这 ...

  8. binding(转)

    1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...

  9. WPF之Binding【转】

    WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...

随机推荐

  1. 启动android程序和虚拟机时候出现如下错误的解决方法

    启动android程序和虚拟机时候出现如下错误的解决方法. 错误重现: [2011-07-13 16:22:48 - Emulator] invalid command-line parameter: ...

  2. mysql服务器辅助选项

    查看控制台命令行前缀 : echo $PS1 ,例如输出 '[\u@\h \w]#     其中,\u是用户名,\h是主机名称: hostname -s 可以查看当前主机名,  hostname 'z ...

  3. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题

    之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...

  4. 如何获取SQL Server数据库元数据的方法

    发布时间:2007.06.15 05:05    来源:赛迪网    作者:3946469 元数据简介 元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据 ...

  5. OC中-方法到底是如何使用的?

    方法:方法是Objective-C独有的一种结构,只能在Objective-C中声明.定义和使用,C语言不能声明.定义和使用. 1.类方法以+号开头,对象方法以-号开头+ (void) init;  ...

  6. uva - 10833 Supermean(二项式系数,对指数)

    模拟发现,每个元素求和时,元素的系数是二项式系数,于是ans=sum(C(n-1,i)*a[i]/2^(n-1)),但是n太大,直接求会溢出,其实double的范围还是挺大的,所以可以将组合数转化成对 ...

  7. Ubuntu 修改时间

    输入"date",显示的是: Tue Jan :: UTC 输入"date -R" 显示的是: Tue, Jan :: + 和北京时间相差了8个小时. 1.选择 ...

  8. 模拟HTTP请求的一个工具

    在看洪大师的Symfony2的视频教程时,提到一个模拟HTTP请求的工具,HTTPie工具,比Curl好用哦

  9. 【转】oracle的substr函数的用法

    [转]oracle的substr函数的用法 )     would return 'The' ) value from dual

  10. LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

    解决方法即 where后加 .Compile()