自学WPF之Binding(一)
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(一)的更多相关文章
- 自学WPF之Binding(二)
没有Source的Binding,使用ContentText作为Binding源: 上一篇是把CLR类型对象当作指定为Binding的Source,两种方法:一是把对象赋值给Binding.Sourc ...
- WPF之Binding深入探讨
原文:http://blog.csdn.net/fwj380891124/article/details/8107646 1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在 ...
- WPF数据绑定Binding(二)
WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...
- WPF的Binding功能解析
1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...
- 【转】WPF中Binding的技巧(一)
WPF中Binding的技巧(一) 在WPF应用的开发过程中Binding是一个非常重要的部分. 在实际开发过程中Binding的不同种写法达到的效果相同但事实是存在很大区别的. 这里将实际中碰到 ...
- 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层的控件对象:这 ...
- WPF之Binding【转】
WPF之Binding[转] 看到WPF如此之炫,也想用用,可是一点也不会呀. 从需求谈起吧: 首先可能要做一个很炫的界面.见MaterialDesignInXAMLToolKit. 那,最主要的呢, ...
随机推荐
- EF分页
先来看看几个LINQ to SQL的几个函数. Take 说明:获取集合的前n个元素:延迟.即只返回限定数量的结果集. var q = ( from e in db.Employees order ...
- linux操作系统基础篇(二)
Linux用户.群组.权限 1.用户也是由一个个文件组成的下列文件都是存放用户信息的文件 useradd user1 /etc/passwd: 存放用户信息 /etc/shadow/ :存放用户密码 ...
- Redis Save 与 BGSAVE 的区别
一,save保存数据到磁盘的方式: Redis Save 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘. 语法redis Sav ...
- IdentityServer4(10)- 添加对外部认证的支持之QQ登录
前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外 ...
- [动态规划]P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
- unity android相互调用
简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...
- 安卓自定义控件(三)实现自定义View
前面两篇博客,把View绘制的方法说了一下,但是,我们只在onDraw里面做文章,控件都是直接传入一个Context,还不能在布局文件里使用自定义View.这一篇博客,就不再讲绘制,在我们原先的基础上 ...
- react入门到进阶(一)
一.何为react Facebook在F8会议上首次提出这个概念,一套全新的框架就此诞生. React 不是一个完整的 MVC.MVVM 框架,其只负责 View 层 React 跟 Web Comp ...
- easyUI整合富文本编辑器KindEditor详细教程(附源码)
原因 在今年4月份的时候写过一篇关于easyui整合UEditor的文章Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合,从那 ...
- POJ2251-Dungeon Master
题意:给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层的地图,相同RC坐标处是连 ...