书上写着: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. 文件I/O(不带缓冲)之open函数

    调用open函数可以打开或创建一个文件. #include <fcntl.h> int open( const char *pathname, int oflag, ... /* mode ...

  2. (一)javascript中的数组index属性——获取数组的索引值

    例如:要做到这样的效果 点击每个选项时,会显示不同的div. 我们的做法:在javascript中,先把所有的div的display设置为none,然后在根据当前的数组里的索引值进行一个显示div的过 ...

  3. C#_dropdownlist_3

    DropDownList则与TextBox等控件不同,它使用的是select标记.它需要两个值:在下拉框中显示的列表,和默认选项.而自动绑定一次只能绑定一个属性,因此你需要根据需要选择是绑定列表,还是 ...

  4. Java ZIP File Example---refernce

    In this tutorial we are going to see how to ZIP a file in Java. ZIP is an archive file format that e ...

  5. c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,

    #include <iostream.h> #define  MAX 100 void dispaly(int a[],int n) {     for(int i=0;i<n;i+ ...

  6. 使用jstack分析java程序cpu占用率过高

    在项目中经常会碰到CPU占用率过高的问题,那么碰到这类问题应当如何处理呢?下面提供一种处理思路: 首先top -H -p <pid>以线程的模式查看java应用的运行情况,找到占用cpu或 ...

  7. webbroswer 后台注入脚本 的方法

    HtmlElement script = webBrowser.Document.CreateElement("script"); script.SetAttribute(&quo ...

  8. scala学习笔记:理解lazy值

    scala> var counter = 0 counter: Int = 0 scala> def foo = {counter += 1; counter} foo: Int scal ...

  9. ASP.Net_入门准备

    基础篇:(学习能力取决于你的基础扎不扎实) 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.NET是一个全 ...

  10. SQL Server2008数据库如何改名

    未使用的数据库改名比较方便,找到你要更改的数据库,右键选择[重命名]. 2 然后将你想要更改的名字写好,然后点击一下旁边的空白栏. 3 然后你就发现数据库的名称已经改好了. END 使用中的数据库   ...