Binding的重要性就不作介绍了,是作为数据交互的支撑,下面来介绍一下为Binding指定源(Source)的几种方法:

  • 把普通CLR类型的单个对象指定为Source:包括.NET Framework自带类型的对象和用户自定义类型的对象。如果类型继承了INotifyPropertyChanged的接口,则可以通过在属性的set激发PropertyChanged事件来通知绑定数据已经更新。
  • 把普通CLR集合类型对象指定为Source:包括数组。List<T>、ObservableCollection<T>等集合类型。实际工作中,我们常把一个集合作为ItemsControl的派生类的数据源来使用,一般把控件的ItemsSource属性使用binding关联到一个集合对象上。
  • 把ADO.NET数据对象指定为Source:包括DataTable、DataView等对象。
  • 使用XMLDataProvider把XML数据指定为Source:用于级联式控件绑定数据源,如TreeView、menu等,Binding关联到树状结构的Xml上。
  • 把依赖对象(Dependence Object)指定为Source:依赖对象不仅可以作为Binding的目标,同时也可以作为Binding的源。依赖对象的属性可以作为Binding的path。
  • 把容器的DataContext 指定为Source:先建立一个Binding,只给它设置path而不设置Source,这时候Binding会自动把控件的DataContext当作自己的Source(它会沿着控件树一层一层往外找直到找到带有path制定属性的对象为止)。
  • 通过ElementName指定Source:在C#里可以直接把对象赋值给Binding,但Xaml无法访问对象,只能用NAME属性,来找到对象。
  • 通过Binding的RelativeSource属性相对的指定Source:当空间需要关注自己的、自己容器的、或者自己内部元素的某个值就需要使用这种方法。
  • 把ObjectDataProvider对象指定为Source:当数据源的数据不是通过属性而是通过方法暴漏给外界的时候,我们可以使用这两种对象来包装数据源再把他们作为指定的Source。
  • 把使用LINQ检索的得到的数据作为Binding对象。

下面我们来介绍每一种情况。

(1)继承了INotifyPropertyChanged的接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel; namespace MyFirstWPFTest
{
public class Employee:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name; public string Name
{
get { return _name; }
set {
_name = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
}
}
}
private int _age; public int Age
{
get { return _age; }
set { _age = value; }
} }
}

前台设计代码:

<Window x:Class="MyFirstWPFTest.BindingPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BindingPage" Height="300" Width="300">
<StackPanel>
<TextBox Name="txtName" BorderBrush="Black" Margin="5"></TextBox>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition>
</ColumnDefinition>
<ColumnDefinition>
</ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Content="Cancel" Grid.Column="0" Height="23" Name="Cancel" Click="Cancel_Click" Width="75" />
<Button x:Name="btnOK" Grid.Column="1" Width="78" Click="btnOK_Click">Add Age</Button>
</Grid>
</StackPanel>
</Window>

后台逻辑代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes; namespace MyFirstWPFTest
{
/// <summary>
/// BindingPage.xaml 的交互逻辑
/// </summary>
public partial class BindingPage : Window
{
Employee em;
public BindingPage()
{
InitializeComponent();
//em = new Employee();
//Binding binding = new Binding();
//binding.Source = em;
//binding.Path = new PropertyPath("Name");
//BindingOperations.SetBinding(this.txtName, TextBox.TextProperty, binding);
this.txtName.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = em = new Employee() });
} private void btnOK_Click(object sender, RoutedEventArgs e)
{
em.Name += "lily";
} private void Cancel_Click(object sender, RoutedEventArgs e)
{
this.txtName.Text = "";
}
}
}

运行效果:

同样绑定也可以在前台实现:

<TextBox Name="txtbind" Text="{Binding Path=Value,ElementName=silder1}" BorderBrush="Black" Margin=""/>
<Slider Name="silder1" Maximum="" Minimum="" Margin=""/>

运行效果:

这里需要说明一下,如果在文本框里输入数字,当光标离开文本框时,silder会随之变化,之所以在losefocus后变化是因为UpdateSourceTrigger属性的值,当需要输入值以后就随之变化的话,需将UpdateSourceTrigger属性值设置为PropertyChanged。

自学WPF之Binding(一)的更多相关文章

  1. 自学WPF之Binding(二)

    没有Source的Binding,使用ContentText作为Binding源: 上一篇是把CLR类型对象当作指定为Binding的Source,两种方法:一是把对象赋值给Binding.Sourc ...

  2. WPF之Binding深入探讨

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

  3. WPF数据绑定Binding(二)

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

  4. WPF的Binding功能解析

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

  5. 【转】WPF中Binding的技巧(一)

    WPF中Binding的技巧(一)   在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到 ...

  6. WPF之Binding的使用

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

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

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

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

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

  9. WPF之Binding【转】

    WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...

随机推荐

  1. ARM开发板链接shell

    1.用网线插入开发板(最好链接路由器) 2.启动开发板(可以用U盘启动) 执行 #run bootusb 3.联网 #ifconfig eth0 up #udhcpc或者#dhclient wan # ...

  2. MyEclipse10激活方法

    背景:因为以前一直使用的是myeclipse8.6版本,但因为版本太低有些功能不支持,于是想试用下myeclipse10.0版本,但是下载后发现需要激活,但在激活的过程中遇到了很多坑,于是便有了本文的 ...

  3. [转载] Gossip算法学习

    转载自http://blog.csdn.net/yfkiss/article/details/6943682/ 1. 概述gossip,顾名思义,类似于流言传播的概念,是一种可以按照自己的期望,自行选 ...

  4. Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView

    Android Oreo 8.0 新特性实战 Autosizing TextView --自动缩放TextView 8.0出来很久了,这个新特性已经用了很久了,但是一直没有亲自去试试.这几天新的需求来 ...

  5. LKD: Chapter 6 Kernel Data Structures

    这一章我们研究四种主要的数据结构: linked lists, queues, maps, binary trees. Linked Lists:(<linux/list.h>) 在lin ...

  6. Iptables详解七层过滤

    <Iptables详解七层过滤> 一.防火墙简介 防火墙其实就是一个加固主机或网络安全的一个设备或者软件而已,通过防火墙可以隔离风险区域与安全区域的连接,同时不会妨碍风险区域的访问.当然需 ...

  7. 魔方NewLife.Cube升级v2.0

    魔方是一套集成权限管理的MVC管理后台,最具特色功能是模版覆盖机制,是XCode实体类的最佳搭档! v2.0.2017.1126   借助Ajax支持高级操作,如:删除选中.批量启用禁用等 用户管理增 ...

  8. 查看Page结构

    SQL Server存储数据的基本单元是Page,每一个Page的大小是8KB,数据文件是由Page构成的.在同一个数据库上,每一个Page都有一个唯一的资源标识,标识符由三部分组成:db_id,fi ...

  9. 2017上半年技术文章集合【Android】—184篇文章分类汇总

    地址: http://blog.csdn.net/androidstarjack/article/details/77923753 声明 | 本文是于亚豪 原创 终端研发部 前言: 2017年已经过大 ...

  10. scrapy初试水 day01

    1.安装pip install Scrapy#一定要以管理员身份运行dos窗口conda install scrapy2.创建项目scrapy startproject hello3.在hello/s ...