Binding的源和路径
书上写着: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的源和路径的更多相关文章
- Binding的Path(路径)
Binding的源可以是控件(一个控件是另一个控件的Source.控件把自己的容器作为Source),把集合作为ItemsControls的Source,把xml作为Tree或者Menu的Source ...
- 获得数据源和路径desc.catalogPath
workspace:C:\Users\dell\Documents\ArcGIS\Default.gdb\ddf inPath:c:\users\dell\documents\arcgis\defau ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- WPF之Binding的使用
引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...
- WPF之Binding深入探讨--Darren
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 深入浅出WPF之Binding的使用(一)
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象:这 ...
- binding(转)
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- WPF之Binding【转】
WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...
随机推荐
- php常用系统函数
首先纯html页要用meta标签声明编码 <meta http-equiv="Content-Type" content="text/html; charset ...
- [C++知识点]2015.4.18
1.“static_cast/强制转换”后普通函数.虚函数的表现 A基类 B子类 实例aPtr:将B实例强制抓换得到的A实例 实例bPtr:将A实例强制转换得到的B实例 总结: (1) aPtr因为是 ...
- .Net 与 Java 的服务接口相互调用
本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...
- JavaScript总结1
一.JavaScript变量类型.声明.作用域 1.1 数字 number 小数和整数都叫number,以0x或0X开头的表示十六进制.当无穷大时,用Infinity表示(试试 9/0),其他非数字用 ...
- Azure PowerShell 创建虚拟机
# 指定订阅名称$subscriptionName="订阅名称"# 指定云服务名称$serviceName="云服务名称"# 指定用来保存虚拟机VHD的存储$s ...
- .NET学习笔记(3) — VisualStudio使用总结
目录 一:VS是什么? 二:VS可以创建什么类型的工程? 三:VS的常用功能? 四:VS都有哪些使用技巧? 五:注意事项 六:资源汇总 一:VS是什么? Microsoft Visual Stud ...
- C#下利用封包、拆包原理解决Socket粘包、半包问题(新手篇)
介于网络上充斥着大量的含糊其辞的Socket初级教程,扰乱着新手的学习方向,我来扼要的教一下新手应该怎么合理的处理Socket这个玩意儿. 一般来说,教你C#下Socket编程的老师,很少会教你如何解 ...
- c# 委托与异步调用
背景:在winform UI中,有时需要对控件进行比较频繁的刷新,如进度条.picturebox显示视频等.如果在主线程进行这些刷新操作,操作还未完成就将执行下一次刷新,程序将发生错误:如果只是创建另 ...
- 史上最全的phpstorm常用配置
取消自动保存并标识修改的文件为星星标记 1.取消自动保存 进入 File -> Settings -> General,取消下面两选项的勾选: 2.星星标记 进入 File -> S ...
- Unity3D 之射线检测
这里来记录下射线检测的相关内容: 射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真. 射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候 ...