什么是数据绑定?

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. Linux下取代top的进程管理工具 htop

    一.htop 简介 This is htop, an interactive process viewer for Linux. It is a text-mode application (for ...

  2. HDU 4289:Control(最小割)

    http://acm.hdu.edu.cn/showproblem.php?pid=4289 题意:有n个城市,m条无向边,小偷要从s点开始逃到d点,在每个城市安放监控的花费是sa[i],问最小花费可 ...

  3. [OSG]OpenSceneGraph FAQ 以及OSG资源

    1.地球背面的一个点,计算它在屏幕上的坐标,能得到吗? 不是被挡住了吗? 答:计算一个空间点的屏幕坐标,使用osgAPEx::GetScreenPosition函数.当空间点处于相机视空间内(不管它是 ...

  4. ASP.net gridview之性别

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  5. 浅析call和apply的不同

    call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就 ...

  6. NPY and girls-HDU5145莫队算法

    Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...

  7. [Linux] vimdiff 快速比较和合并少量文件

    纯文本文件比较和合并工具一直是软件开发过程中比较重要的组成部分,vimdiff 能够在比较出来的多处差异之间快速定位,很容易的进行文件合并操作.在需要快速比较和合并少量文件的时候,vimdiff是很好 ...

  8. POSTMAN as debugger for integration APPs

    Chrome Menu: Window > Extensions > Postman - REST Client 0.8.4.10 起个标题,有空总结一下一个经验,关于Netsuite i ...

  9. Python3基础 给一起列表起两个名字

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. 《Spring MVC学习指南》怎么样?答:书名具有很大的欺骗性

    2016年6月21日 最近,因为工作需要,我从网上买了一本<Spring MVC学习指南>,ISBN编号: 978-7-115-38639-7,定价:49.00元.此书是[美]Paul D ...