WPF 数据绑定Binding
什么是数据绑定?
Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简单而一致的方法来显示数据以及与数据交互。
通过数据绑定,您可以对两个不同对象的属性值进行同步。——MSDN
什么意思呢?先可以这样理解,数据绑定是一种行为,这个行为可以将多个对象的属性显示在UI上,当用户修改了UI上的值之后(当然必须是要看实际情况),对应的属性值也被改变,从而达到数据交互的目的。看一下MSDN上的一幅图(感觉这幅图到处都能看见(偷笑)):
Binding可以通过XAML语句实现界面与数据的耦合。如果把Binding比作数据的桥梁,那么它的两端分别是Binding的绑定目标和绑定源。数据从哪里来哪里就是源,Binding是架在中间的桥梁,Binding目标是数据要往哪儿去。一般情况下,绑定源是逻辑层的对象,绑定目标是UI层的控件对象,这样,数据就会源源不断通过Binding送达UI层,被UI层展现,也就完成了数据驱动UI的过程。——参考《WPF中的数据绑定》
从上图可以看出数据绑定的4个组件,为方便理解,结合例子:将TextBox的内容绑定到Employee对象的Name属性,也就是说把Name的值显示在TextBox上:
- 绑定目标对象:TextBox
绑定目标对象可以是所有UIElement对象。为什么?这是自然而然的事情。数据绑定就是为了将数据与UI进行交互,那么绑定的这种行为必然正对所有UIElement对象,例如常见的Button,TextBlock等等。 - 目标属性:TextBox的Text属性
- 目标属性必须是依赖项属性。为什么呢?在WPF中,只有这样的属性才支持数据绑定,这也就意味着不能绑定字段。不过,在WPF中UIElemnt对象的大部分属性都是依赖属性且大多数依赖属性都是支持数据绑定的。为什么呢?从《WPF依赖属性》中可以知道,只有DependencyObject类型可以定义依赖项属性,而所有UIElement对象都是从DependencyObject派生的。
- 绑定源对象:Employee对象
绑定源的对象可以有哪些呢?WPF支持CLR对象和XML形式的数据:UIElement、任何列表对象、与ADO.NET数据或Web服务关联的CLR对象、包含XML数据的XmlNode.
- 绑定源值的path(这个从图中看不出来,但可以想象的出来,^_^):Name
如何绑定?
根据实际应用的情况,绑定目标基本上都是UI对象,我们来看一下绑定数据的各种情况:
1、绑定UI对象
举一个简单例子,选择ComboBox下拉列表中的性别,并显示在TextBlock中。
xaml:
- <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
- <TextBox x:Name="tbk" Width="" Height="" Background="#FFF2F2F2" VerticalAlignment="Top" TextAlignment="Center" FontSize=""
- Text="{Binding ElementName=combo,Path=SelectedItem.SexName}"/>
- <ComboBox x:Name="combo" Width="" Height="" Margin=""
- DisplayMemberPath="SexName" SelectedValuePath="SexId" SelectedIndex=""/>
- </StackPanel>
cs,主要是给ComboBox赋数据源:
- public partial class MainWindow : Window
- {
- List<SexType> _sexCollection;
- public MainWindow()
- {
- InitializeComponent();
- _sexCollection = new List<SexType>()
- {
- new SexType(){SexId=,SexName="男"},
- new SexType(){SexId=,SexName="女"},
- new SexType(){SexId=,SexName="未知"}
- };
- combo.ItemsSource = _sexCollection;
- }
- }
- public class SexType
- {
- public int SexId { get; set; }
- public string SexName { get; set; }
- }
由上述例子可以看出,绑定目标:TextBox,目标属性:TextBox.Text,绑定源对象:combo,绑定源值的Path:combo.SelectedItem.SexName.个中滋味可以自行感受。
2、上面这个例子中comboBox的数据源是在cs中通过”combo.ItemsSource=数据源“来赋值的,那么是否可以通过绑定数据的方式来赋值呢?答案必须是肯定的。
我们知道ComboBox和ListBoxItem都是ItemsControl的派生类,而对于所有的ItemsControl对象都有一个ItemsSource的依赖属性。ItemsSource的类型是IEnumerable,所以集合类型可以成为它绑定的对象。
- <ComboBox x:Name="combo" Width="" Height="" Margin=""
- DisplayMemberPath="SexName" SelectedValuePath="SexId" SelectedIndex=""
- ItemsSource="{Binding _sexCollection}"/>
在修改一下cs文件:
- public partial class MainWindow : Window
- {
- public List<SexType> _sexCollection;
- public MainWindow()
- {
- InitializeComponent();
- _sexCollection = new List<SexType>()
- {
- new SexType(){SexId=,SexName="男"},
- new SexType(){SexId=,SexName="女"},
- new SexType(){SexId=,SexName="未知"}
- };
- //combo.ItemsSource = _sexCollection;
- }
- }
可以看到是没有数据源的,也就是说根本就没有把数据绑到ComboBox上:
这是为什么呢?依赖属性内的垂直通知功能让UI对相间的绑定可以自己负责同步处理,但是对于.NET集合或对象来讲,就不具备这样的能力了。为了让目标属性与源目标保持同步,源目标必须实现一个叫INotifyPropertyChanged的接口。
通常我们只需将集合继承于ObservableCollection类即可。
2、绑定集合
3、数据模板
4、为绑定添加规则及转换器
如何绑定不同的源。
WPF 数据绑定Binding的更多相关文章
- WPF数据绑定Binding(二)
WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- WPF 数据绑定Bingding基础(第四天)
程序的本质是数据加算法.数据会在存储.逻辑和展示三个层面沟通,在WPF中,展示层和逻辑层的沟通就使用Data Bingding来实现. Binding即“绑定”,如果把Bingding比作数据的桥梁, ...
- WPF之Binding的使用
引出: 在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件 ...
- WPF之Binding深入探讨--Darren
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 剖析WPF数据绑定机制
引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...
- WPF 10天修炼 第十天- WPF数据绑定
WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...
- 深入浅出WPF之Binding的使用(一)
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target).一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象:这 ...
随机推荐
- HTML5学习小结
HTML5是用于取代1999年所制定的 HTML4.01和XHTML1.0标准的HTML标准版本.HTML5的第一份正式草案已于2008年1月公布:2012年12月,规范已经正式定稿.W3C计划在20 ...
- 使用httpclient发送http请求
先来个httpclient的maven依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> &l ...
- 工作中总结的常用PHP代码
[目录] ◆PHP常用的代码 ◆HTML常用代码 [值传递 和 引用传递] [单例模式] [魔术常量] [代码调试(自定义一个简单的debug函数)] [thinkphp多表查询] [获取客户端IP地 ...
- JAVA异常处理机制的简单原理和应用
- 关于模拟http请求 cookie的赋值
最近的工作一直是关于模拟http请求方面的知识的. 原本以为很简单,就是简单模拟一下http请求.先用fiddler模拟一下请求,验证接口可用,就直接上代码. 但是在模拟一个联通http的请求时候,我 ...
- 我的第一个WebAPI程序
最近在小武哥的带领下,我去接触了一下WebAPI,虽然说有点晚了,但是我还是学了一下,有点心得吧! 步骤: 1:在Visual Studio 2012中新建MVC4项目,在App_Start目录下有一 ...
- 如何将util.Date转化为sql.Date
通过查看API可以很容易知道,util.Date类时sql.Date的父类,所以根据向上转型的原理可以很简单的知道时可行的,不用做转换都可以. 但是如果想要将util.Date转化为sql.Date, ...
- activiti 中文文档
http://www.mossle.com http://www.mossle.com/docs/activiti/index.html
- 还是this的问题
var name = "The Window"; var object = { name : "My Object", getNameFunc ...
- laravel框架总结(十二) -- 关联关系
这里我们users表对应的模型类名是users,大家特意注意下和user取名的不同 1.一对一关系 1>表A和表B的记录一一对应,比如一个用户对应一个社交账号 数据表的设计如下: 2> ...