Binding(一):数据绑定

    这节开始分几期来讲一下WPF中Binding的相关用法,本节主要讲使用Binding进行数据绑定。

Binding的作用

    在WinForm中,我们要想对控件赋值,需要在后台代码中拿到控件对象进行操作,这种赋值形式,从根本上是无法实现界面与逻辑分离的。在WPF中,微软引入了Binding对象,通过Binding,我们可以直接将控件与数据做绑定,在后台不用拿到控件对象,直接操作数据源,系统会自动监听数据源的变化实时的更新到控件上,相反的,用户改变控件的值,也会实时更新到后台数据源,这也就是我们之前所说的,WPF天生支持MVVM模式。

数据绑定

    下面将通过一个实例来讲解如何使用Binding进行数据绑定,具体内容如下:

    点击按钮“展示数据”时,将数据显示在上方文本框中。

    后台代码如下:

    我使用GetData方法模拟数据,返回1-10的随机数,上图所示的形式是使用控件对象直接赋值的方式。

    另外,您可能已经注意到了,我实现了一个System.ComponentModel命名空间下的INotifyPropertyChanged接口,这个接口是实现数据绑定后台必须要继承的接口,从它的字面意思我们也可以知道这个接口是用于通知属性已经改变,这个接口内部有一个PropertyChanged的事件,我们需要在每个要绑定的属性的set中调用它,就如上图Data属性中:

this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data"));

    这句代码,它的意思就是通知系统,我的Data属性改变了,系统收到这个通知,会及时找到跟这个属性Binding的前台控件及时的更新值,下面演示使用Binding进行数据绑定:

publicMainWindowBase()
{InitializeComponent();Binding binding = new Binding();binding.Source = this;binding.Path = new PropertyPath("Data");BindingOperations.SetBinding(this.text_show, TextBox.TextProperty, binding);
}
private void Button_Click(object sender, RoutedEventArgs e)
{Data = GetData();
}

    我们需要在构造器中先设置绑定,新建Binding对象,设置它的源和路径,意思就是去哪个地方找哪个属性,最后通过BindingOperations.SetBinding这个方法将绑定设置到控件,这样我在Button的事件处理器中只管对Data赋值,系统会自动更新到控件,这也是WPF中的数据驱动控件。

    另外,Binding对象还有个Mode属性,它是BindingMode枚举,枚举内容如下图:

    OneWay:指示数据只从源到控件,用户手动改变控件的值,系统不会更新到源,它跟OneWayToSource是相反的,后者是数据只从控件到源;

    TwoWay:则是数据可以在控件和源双方流通;

    Default:默认值,一般是TwoWay;

    OneTime:顾名思义,数据只会流通一次;

    SetBinding方法中有三个参数,第一个和最后一个参数是要绑定的控件对象和Bingding对象,第二个参数是控件对象的依赖属性,指示绑定的数据要赋值给控件的哪个属性,此处要说明一下,只有控件的依赖属性才可以使用数据绑定,关于依赖属性,会在后续的章节解释。

    运行起来,点击按钮后,效果如下:

    在实际开发中,我们一般会将绑定的这块代码写在通过XAML标记扩展的形式写在Xaml页面中,那么构造器中关于绑定的代码就可以删掉,改为如下代码:

public MainWindowBase()
{InitializeComponent();this.DataContext = this;//Binding binding = new Binding();//binding.Source = this; //binding.Path = new PropertyPath("Data");//BindingOperations.SetBinding(this.text_show, TextBox.TextProperty, binding);
}
<TextBox x:Name="text_show" Text="{Binding Path=Data}" />

    在前台使用标记扩展绑定数据,需要后台配置前台的数据上下文,就是this.DataContext对象。

    标记扩展中,使用Binding命令指示数据绑定,Path属性是默认值,可以省略,Source也可以省略,默认DataContext对象,这样就极大的简化了代码。

    总结起来,使用Binding的流程是:

        1.实现INotifyPropertyChanged接口

        2.为需要绑定的属性的set块添加PropertyChanged事件通知

        3.在构造器(不一定是构造器,可以是任何一个早于您使用数据绑定情景之前的方法中)中绑定数据源 或者 使用XAMl的标记扩展绑定数据源

本节到此结束...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙江省2021年英语高考成绩查询,浙江高考成绩查询、志愿填报时间公布!

为期四天的2021年浙江省高考将于明天下午落幕对于高考生来说志愿填报是除考试外的重要环节今晚&#xff0c;浙江省教育考试院发布2021年浙江省高考志愿填报日程安排根据计划6月26日左右将公布各段分数线和一分一段线提供考试成绩和位次号查询所有考生高考志愿均实行网上填报浙江…

background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)

&#xff08;图书介绍&#xff1a;童晶&#xff1a;《Python趣味创意编程》新书预告&#xff09;本章我们将实现旋转的圆弧&#xff0c;如图所示。首先学习圆弧的绘制和旋转&#xff1b;接着利用全局变量实现圆弧逐渐变长&#xff0c;学习if选择语句&#xff0c;实现圆弧长度的…

大师之路-GoLive 视频教程

全部章节 (54Files/1.2G)01 输出网页设计稿 (素材)02 建立站点03 操作方式初识04 用版面网格进行布局05 创建翻转及脚本库设置06 通过关系图策划站点07 使用表格08 表格的控制和嵌套09 应用表样式和表数据处理10 表格制作实战(1/2)11 表格制作实战(2/2)12 色彩应用13 管理站点色…

世纪渣男何书桓! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓

你也可以搞懂的微服务第一篇——来自ThoughtWork的学习体验

????欢迎点赞 &#xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;????本文作者&#xff1a;由webmote 原创&#xff0c;首发于 【掘金】????作者格言&#xff1a;生活在于折腾&#xff0c;当你不折…

laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地

JosephSilber/page-cache Laravel 静态页面缓存2020-02-26 09:39:53Laravel 页面缓存这个包允许您轻松地将响应缓存为磁盘上的静态文件&#xff0c;以便更快速地加载页面。包管理地址&#xff1a;安装&#xff1a;用 composer 安装 page-cache 包&#xff1a;composer require …

pca 累积方差贡献率公式_机器学习数据降维方法:PCA主成分分析

PCA在机器学习中很常用&#xff0c;是一种无参数的数据降维方法。PCA步骤&#xff1a;将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化&#xff0c;即减去这一行的均值求出协方差矩阵求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大…

克制

克制&#xff0c;克制&#xff0c;学会克制自己的情绪&#xff01;生气容易变老&#xff0c;生气是浪费自己的时间&#xff0c;生气是对自己不负责&#xff0c;生气容易对别人幼小的心灵造成伤害。。。 总之&#xff0c;生气这个坏东西&#xff0c;弃之&#xff01; 转载于:htt…

教程丨亿万网友一起换头像欢庆新中国成立70周年,就差你了!

全世界只有3.14 % 的人关注了青少年数学之旅眼看着2019年国庆节马上要到了大街小巷都挂起来显眼的国旗而今天早上朋友圈更是被“国旗”刷屏一打开朋友圈满屏的国旗微信头像不少网友们都以为只要在朋友圈“微信官方”就能获取定制国旗头像虽说这是一个官方的彩蛋但实际上并不是这…

如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent

公司一台TMG服务器更换为新服务器&#xff0c;安装部署完TMG2010后&#xff0c;再安装Backup Exec 2010 Remote Agent时无法通过推送方法安装成功&#xff0c;出现如下错误提示&#xff1a; 此时&#xff0c;只好通过手动方法在TMG服务器上安装Be Agent。 登录TMG服务器&#x…

如何在 C# 9 中使用record类型?

原文链接&#xff1a;https://www.infoworld.com/article/3607372/how-to-work-with-record-types-in-csharp-9.html原文标题&#xff1a;How to work with record types in C# 9翻译&#xff1a;沙漠尽头的狼(谷歌翻译加持)利用 C# 9 中的record类型来构建不可变类型和线程安全…

计算机专业专业课代号408,计算机专业考研你一定要知道的事情!

1.计算机专业专业课比较难&#xff0c;建议考研最好是本专业或者相关专业&#xff0c;有一定的基础&#xff0c;跨考有一定的难度。2.计算机考研主要分为学硕和专硕两个方向。学硕为计算机技术应用&#xff0c;专硕为计算机应用和软件工程。3.考试科目我这里只说学硕(专硕每个学…

化妆definer是什么意思_化妆品上的r是什么意思

1、英米茄化妆品包装盒上的R是什么意思用圆圈R&#xff0c;是“注册商标”的标记&#xff0c;意思是该商标已在国家商标局进行注册申请并已经商标局审查通过&#xff0c;成为注册商标。圆圈里的R是英文register注册的开头字母。商标标记&#xff1a;中国商标法实施条例规定&…

巧用TensorFlow实现图像处理

经过几年的发展&#xff0c;深度学习方法摧枯拉朽般地超越了传统方法&#xff0c;成为人工智能领域最热门的技术。谷歌、亚马逊、百度、Facebook 纷纷开源了自己的深度学习框架。而支撑AlphaGo的核心技术架构&#xff0c;TensorFlow&#xff0c;以其一鸣惊人的绝对表现&#xf…

c#实现链表

c#实现链表 首先定义结点类型&#xff0c;定义了&#xff0c;前一个指针域&#xff0c;后一个指针域&#xff0c;如下&#xff1a;using System; namespace List{ /// <summary> /// Summary description for ListNode. /// </summary> // 结点类 public class Lis…

[笔试题]交换两个数不使用第三方变量 深入理解按位异或运算符

异或运算相当与mod 2运算&#xff1a; 1^1 0, 1^0 1, 0^1 1, 0 ^ 0 0 (11)%2 0, (10)%2 1, (01)%2 1, (00)%2 0 Single Number II 这题从所有出现3次的数组中找只出现一次的数&#xff0c;相当于mod 3运算 以下部分为转载&#xff1a; 转载&#xff1a;http://blog.csdn…

微软面向初学者的机器学习课程:1.4-机器学习技术

写在前面&#xff1a;最近在参与microsoft/ML-For-Beginners的翻译活动&#xff0c;欢迎有兴趣的朋友加入&#xff08;https://github.com/microsoft/ML-For-Beginners/issues/71&#xff09;机器学习技术构建、使用和维护机器学习模型及其使用的数据的过程与许多其他开发工作流…

四川大学计算机科学与技术专业分数线,2015年四川大学计算机科学与技术硕士考研复试分数线是290分...

2015年四川大学计算机科学与技术硕士考研复试分数线是290分 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;19.90 积分2015 年四川大学计算机科学与技术硕士考研复试分数线是 290 分2015 年四川大…

一个男人逐渐变心的过程。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;渣男&#xff0c;实锤&#xff01;↓ ↓ ↓

2013-10-10

为什么80%的码农都做不了架构师&#xff1f;>>> http://wordpress.org/plugins/find-duplicates/ 检测文章的标题是否重复的插件 转载于:https://my.oschina.net/520yzw/blog/167580