什么是数据绑定?

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上:

  1. 绑定目标对象:TextBox
    绑定目标对象可以是所有UIElement对象。为什么?这是自然而然的事情。数据绑定就是为了将数据与UI进行交互,那么绑定的这种行为必然正对所有UIElement对象,例如常见的Button,TextBlock等等。
  2. 目标属性:TextBox的Text属性
  3. 目标属性必须是依赖项属性。为什么呢?在WPF中,只有这样的属性才支持数据绑定,这也就意味着不能绑定字段。不过,在WPF中UIElemnt对象的大部分属性都是依赖属性且大多数依赖属性都是支持数据绑定的。为什么呢?从《WPF依赖属性》中可以知道,只有DependencyObject类型可以定义依赖项属性,而所有UIElement对象都是从DependencyObject派生的。
  4. 绑定源对象:Employee对象

    绑定源的对象可以有哪些呢?WPF支持CLR对象和XML形式的数据:UIElement、任何列表对象、与ADO.NET数据或Web服务关联的CLR对象、包含XML数据的XmlNode.

  5. 绑定源值的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的更多相关文章

  1. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  2. WPF之Binding深入探讨

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

  3. WPF的Binding功能解析

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

  4. WPF 数据绑定Bingding基础(第四天)

    程序的本质是数据加算法.数据会在存储.逻辑和展示三个层面沟通,在WPF中,展示层和逻辑层的沟通就使用Data Bingding来实现. Binding即“绑定”,如果把Bingding比作数据的桥梁, ...

  5. WPF之Binding的使用

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

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

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

  7. 剖析WPF数据绑定机制

    引言 WPF框架采取的是MVVM模式,也就是数据驱动UI,UI控件(Controls)被严格地限制在表示层内,不会参与业务逻辑的处理,只是通过数据绑定(Data Binding)简单忠实地表达与之绑定 ...

  8. WPF 10天修炼 第十天- WPF数据绑定

    WPF数据绑定 数据绑定到元素属性是将源对象指定为一个WPF元素,并且源属性是一个依赖属性,依赖属性内置了变更通知.当改变源对象依赖属性值之后,绑定目标可以立即得到更新,开发人员不需要手动编写响应事件 ...

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

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

随机推荐

  1. SQL 递归

    -- 查询指定部门下面的所有部门, 并汇总各部门的下级部门数 ) SET @Dept_name = N'MIS' ;WITH DEPTS AS( -- 查询指定部门及其下的所有子部门 -- 定位点成员 ...

  2. [T-SQL]INSERT INTO SELECT 与 SELECT INTO FROM

    1.INSERT INTO SELECT 语法:INSERT INTO Table2(field1,field2,...) select value1,value2,... from Table1 要 ...

  3. 一次爬虫实践学习(C#)

    我们经常浏览网页,有时候看到一些精美的图片,想下载下来保存,但是太多,如果一张一张的下载,那太费时了:如果你喜欢看书,看小说,那么浏览小说网站是常有的事,但是有时候我们不能联网,比如农村老家,如果还想 ...

  4. job

    详情见:http://blog.csdn.net/wxwzy738/article/details/25158787 spring.xml <beans xmlns="http://w ...

  5. Linux下的Hello world

    总算正式开始学习Linux了. 先从Hello world入手. 1. 查看当前目录 lenovo@ubuntu:~$ pwd /home/lenovo 2. 新建test目录 lenovo@ubun ...

  6. MVC2,MVC3,MVC4和MVC5的不同

    现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...

  7. [转]使用 Xcode 5 和 Interface Builder创建 Hello World App

    转载地址:http://www.ithome.me/archives/581.html 使用 Xcode 5 和 Interface Builder创建 Hello World App 发表回复 当x ...

  8. ubuntu下安装JDK并搭建activeMQ

    1.安装JDK,网上有人说activeMQ支持持JDK1.7及以上版本,未实际测试,保险起见我这里直接安装JDK1.7. #apt-get install openjdk--jdk 2.设置环境变量 ...

  9. Father Christmas flymouse--POJ3160Tarjan

    Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...

  10. 高效 JavaScript

    高效 JavaScript 原译文地址 http://kb.operachina.com/node/207 传统上,网页中不会有大量的脚本,至少脚本很少会影响网页的性能.但随着网页越来越像 Web 应 ...