WPF 数据绑定Bingding基础(第四天)
程序的本质是数据加算法。数据会在存储、逻辑和展示三个层面沟通,在WPF中,展示层和逻辑层的沟通就使用Data Bingding来实现。
Binding即“绑定”,如果把Bingding比作数据的桥梁,那么它的两端分别是Binding的源(Source)和目标(Target)。一般情况下,Binding源是逻辑层的对象,Binding目标是UI层的控件对象。这样数据就会源源不断的通过Bindin送达UI层、被UI层的展现,也就完成了数据驱动UI的过程。
下面通过一个简单的例子来讲明Binding的基本用法:
首先我们创建一个名为Student的类,在这个类的实例将作为数据源来使用。
class Student
{
private string name; public string Name
{
get { return name; }
set { name = value; }
}
}
这个类很简单只有一个Name属性。数据源看作一个对象,但是对象有很多的属性,它到底是把哪个属性通过Binding展示给UI呢?这个属性就称为Bingding的路径(Path)。但是光有属性还不行——Binding是一种自动机制,当值变化之后属性要有能力通知Binding值已经变化的能力,这个能力就是PropertyChanged事件,我们只需要在set语句中激发它就可以了。这个事件我们不需要自己声明,我们要做的是让作为数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口。当为Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件。
实现了INotifyPropertyChanged接口的Student类看起来是这样:
class Student:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; private string name; public string Name
{
get { return name; }
set
{
name = value;
//激发事件
if (this.PropertyChanged != null)
{
this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
这样当Name属性发生变化时PropertyChanged事件就会被激发,Binding接受到这个事件后就告诉UI发生相应的改变。
然后我们准备一个如图的UI界面
<Window x:Class="Bingding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Simple Binding" Height="" Width="">
<Grid>
<StackPanel>
<TextBox x:Name="textBoxName" BorderBrush="Black" Margin="" />
<Button Content="Add Age" Margin="" Click="Button_Click"/>
</StackPanel> </Grid>
</Window>

接下来我们将进行最重要的一步——使用Binding把数据源和UI元素连接起来,代码如下
namespace Bingding
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
Student stu;
public MainWindow()
{ InitializeComponent(); //准备数据源
stu = new Student(); //准备Binding
Binding binding = new Binding();
binding.Source = stu;
binding.Path = new PropertyPath("Name"); //使用Binding连接数据源于Binding目标
BindingOperations.SetBinding(this.textBoxName, TextBox.TextProperty, binding); } private void Button_Click(object sender, RoutedEventArgs e)
{
stu.Name += "Name";
}
}
}
先准备数据源,然后准备Binding,把数据源和目标连接起来的任务是使用“BindingOperating.SetBinding(…)”方法完成的。
- 第一个参数用于指定的目标,本例中为this.textBoxName。
- 与数据源的path原理类似,第二个参数用于为Binding指明数据到达目标的哪个属性。
- 第三个参数就是指定哪个Binding实例将数据与目标关联起来。
当点击Button时,Name变化,则TextBox里的值就变化。如图:

以上就是数据绑定Binding的基础。
*注:以上内容基本是本人在阅读《深入浅出WPF》时觉得重要的知识点,把它出来和大家一起共同学习,也以便自己在今后的日子回顾。详细知识请参阅书籍。
WPF 数据绑定Bingding基础(第四天)的更多相关文章
- C#WPF数据绑定模板化操作四步走
前言:WPF数据绑定对于WPF应用程序来说尤为重要,本文将讲述使用MVVM模式进行数据绑定的四步走用法: 具体实例代码如下: 以下代码仅供参考,如有问题请在评论区留言,谢谢 1 第一步:声明一个类用来 ...
- WPF 数据绑定 1_1 基础知识&绑定到元素属性
A.数据绑定基础: 数据源对象:WPF将从该对象中提取信息,交由目标对象进行显示. 目标对象:从数据源中提取信息,并赋给该对象的属性. B.绑定到元素属性 最简单的绑定情形则是将一个源对象指定为一个W ...
- C#-WPF数据绑定基础(一)
前言:WPF数据绑定技术有效的提高了程序的容错率,可以最大程度的保持程序的健壮性,从而降低程序在使用过程中崩掉的可能性. 接下来,我将分享一下我在写测量程序过程中所用到的数据绑定方面的知识 首先,我所 ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- 微软原文翻译:适用于.Net Core的WPF数据绑定概述
原文链接,大部分是机器翻译,仅做了小部分修改.英.中文对照,看不懂的看英文. Data binding overview in WPF 2019/09/19 Data binding in Windo ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- [深入浅出WP8.1(Runtime)]数据绑定的基础
11.1 数据绑定的基础 数据绑定是一种XAML界面和后台数据通信的方式,因为界面和后台数据的通信的场景有多种,并且数据于数据之间也存在着不一样的关联关系,所以数据绑定的实现技巧和方式也是多种多样的. ...
- WPF数据绑定Binding(二)
WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...
- WPF——数据绑定(一)什么是数据绑定
注意:本人初学WPF,文中可能有表达或者技术性问题,欢迎指正!谢谢! 一:什么是数据绑定? “Windows Presentation Foundation (WPF) 数据绑定为应用程序提供了一种简 ...
随机推荐
- QT: QByteArray储存二进制数据(包括结构体,自定义QT对象)
因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类 1. 利用memcpy拷贝内存数据 / ...
- C#_IComparer实例 - 实现ID或者yearOfscv排序
调用LIST的Sort的时候会调用IComparer的默认实现,quicksort会调用每个元素的CompareTo的IComparable实现 using System; using System. ...
- Making Use of Forms and Fieldsets
Making Use of Forms and Fieldsets So far all we have done is read data from the database. In a real- ...
- 说说log4cplus
<C++ primer 第五版>已经翻了一段时间了,每天早上的班车上看一个小时.书是好书,可惜很多知识还是停留在表面上.每天除了翻书,一是也找到不合适的方法进一步深入,晚上看到新闻联播的老 ...
- ADS1.2 集成开发环境的使用
连风大神都没用过这个ADS1.2,什么破玩意儿啊,好像板子里面的资料也没有找到有这个软件,但是网上有滴,ADS1.2 集成开发环境的使用还是要会的,,, ARM ADS 全称为ARM Develope ...
- app测试点
手机上的app分为基于HTML5的app(类似于pc上的b/S应用)和本地app(类似于C/S结构). 所以测试上我们也可以充分吸收web的b/s和c/s测试经验.但是不同于pc上的应用测试,手机上的 ...
- Android, JSONLIB , java.lang.NoClassDefFoundError: Failed resolution of: Lnet/sf/json/JSONArray; 原因
出现这个错误的原因是因为引用的lib库的V4包与程序的V4包不兼容,替换成一致的包就OK了
- SqlBulkCopy 数据批量操作使用的类
private void SqlBulkCopyByDataTable(string connectionString,string TableName,DataTable dt) { using ( ...
- 你hack那么多啊,该怎么办
当我们通过javascript来操作css样式的时候,假如我们停留在css2的阶段,会发现操作起来并不是很困难.虽然存在一些浏览器兼容的问题,但我们通过封装自己的函数,不仅可以设置样式还能够获取样式. ...
- Json-lib - java.util.Date 转换问题
使用 JSON-lib 将 java.util.Date 对象直接转换成 JSON 字符串时,得到的通常不是想要格式: System.out.println(JSONSerializer.toJSON ...