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) 数据绑定为应用程序提供了一种简 ...
随机推荐
- PAT 1009
1009. Product of Polynomials (25) This time, you are supposed to find A*B where A and B are two poly ...
- Events
Events The idea behind Events is the ability to send data, as parameters, to interested Listeners an ...
- JAVA_java关联源码
java怎样关联源码?? 1,按住control键,点一下你要看源码的类,跳到如下界面: 2,单击,跳到下一个界面 3,继续,找到jdk按照路径,找到src.zip文件 4. 4. 点击OK就可以看源 ...
- 利用JS_SDK实现QQ第三方登录
前言 现如今,第三方登录已成为大部分网站必备的一项基础技能,引入时髦的第三方登录不仅能帮你吸引更多的用户,也让你的网站可以充分利用其他大型网站的用户资源.本次教程将让你的网站最快捷便利地引入QQ登录. ...
- Nodejs v4.x.0API文档学习(2)Assert断言测试模块
文档参考地址:https://nodejs.org/dist/latest-v4.x/docs/api/ Assert(断言) assert模块提供了一组简单的断言测试方法,可以拥有测试不变量.该模块 ...
- android 按两次返回键退出应用
private long mExitTime; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCod ...
- xml的语法与创建
xml语法很简单,但很严格,如果出现错误则不能正常解析,而HTML如果出现局部的错误,照样解析 xml第一行必须写xml头<?xml version='1.0' encoding='utf8'? ...
- apache ambari web页面无法访问解决办法
ambari-server启动成功,但是页面无法访问 作者:Bo liang链接:http://www.zhihu.com/question/34405898/answer/115001510来源:知 ...
- Android中FTP服务器搭建入门
http://www.2cto.com/kf/201501/374048.html http://blog.csdn.net/smile3670/article/details/44343617 有 ...
- 第一篇、C_高精度加法
简介: C语言中,整型占4字节,现在要计算两个100(假设)位以内的数想加,如果只是用整型去存储,明显就会越界.那么,我们有什么好的方法去完成这一操作呢? 1.用数组实现 数组中可以可以存储一定长度的 ...