C#学习笔记-winform和wpf 事件绑定理解
Binding绑定机制其自身就维护者一个绑定注册表,这个注册表中将源与目标一一对应了起来。Target<---->Source。每当UI的属性值发生改变时,WPF系统将会自动调用一个全局的委托事件处理函数,可能就是public event PropertyChangedEventHandler PropertyChanged。在这个事件中,会使用刚才提到的绑定注册表,从而维护绑定目标和绑定数据源之间的数据同步机制
Binding接收到事件后,事件消息会告诉他是哪个属性发生了改变,于是就会通知Binding目标端的UI元素属性显示新的值。
依赖属性和路由事件都是通过注册的方式来实现的,而不是通过直接new方法来实例化得到的。也就是说在类中维护着一个依赖属性注册表和路由事件注册表。而这也是WPF依赖属性和路由事件实现附加功能的幕后机制的基础。
依赖属性的更改通知:
当我们使用绑定机制实现UI元素与依赖属性绑定之后,当UI元素的Property发生改变或者是依赖属性的值发生了改变,都会激发一个PropertyChanged的事件,WPF会响应这个事件实现UI元素与依赖属性的同步。而我们知道,UI元素也是依赖属性。
1、wpf的事件与C#中的普通事件还是有区别的,比如定义事件,需要用add和remove来添加和移除与事件数据有关的TapEvent字段。在触发事件时,靠的是控件的单击事件来触发,尽管在实现上与c#有区别,但步骤一样,定义事件,触发事件(区别是c#事件不需要保留数据,因为它只对控件自己负责,WPF的事件要实现路由,要传送)。
路由事件路由的方式有三种,一种是“冒泡”,就是有事件触发元素往上路由,一种是“直接”,就是只发生在触发元素本身,还有一种是“隧道”,就是从元素树的顶端到触发事件的元素,一般情况下,“隧道”的路由方式的事件,事件的名称前都有一个Preview开头。。路由事件也可以在某个元素上中断它,也就是调用事件订阅方法参的第二个参数,通常是RoutedEventArgs类型,调用它的Handled属性,就会中断事件的路由,到此元素为止。
2、C#中的事件,可以说几乎都是由UI来驱动的,也可以叫做 ”消息驱动“。每次触发事件 都可以看成向程序传递 一条消息,由应用程序的一套算法来 解析消息 来做出反应。 这个过程就是 ”事件订阅“的过程,就是我们在Designer.cs 中常见的 += 符号。
而WPF中的路由事件,从事件的触发者,到事件的响应者 之间 并不存在 ”事件订阅“的关系。事件会通过 冒泡式或者隧道式或者直达式 ”传播“,直到有 ”监听“该事件的监听器监听到,才会做出响应。也就是说, 路由事件的响应者 不是一个,可能是多个。
参考文献:
https://blog.csdn.net/liebert/article/details/78035681
https://blog.csdn.net/IT_ziliang/article/details/53885521
C#学习笔记-winform和wpf 事件绑定理解相关推荐
- JavaScript学习笔记(三)---事件、正则表达式、ES6、运动
JavaScript学习笔记(三)---事件.正则表达式.ES6.运动 27.insertbefore 28.滚动条及事件 29.事件及事件对象 30.鼠标事件对象的属性 31.案例:图片随鼠标移动 ...
- Windows事件等待学习笔记(四)—— 事件信号量互斥体
Windows事件等待学习笔记(四)-- 事件&信号量&互斥体 要点回顾 事件 实验:验证SignalState 第一步:编译并运行以下代码 第二步:观察结果 第三步:修改代码并执行 ...
- oracle job enq tx,【学习笔记】Oracle等待事件 enq:TX–allocate ITL entry产生原因和解决办法...
天萃荷净 运维DBA反映Oracle数据库出现enq:TX–allocate ITL entry等待事件,结合案例分析该等待事件产生原因和解决办法 今天在分析一份awr中发现了较为明显的enq: TX ...
- TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅
TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...
- SilverLight学习笔记--建立Silverlight自定义控件(5)--绑定动画效果
有了上述的基础,我们进一步完善我们的自定义控件,在此我们将创建Storyboard和前面的添加事件处理方法为我们的自定义控件加上动画效果. 1.首先,在MyDesignButton项目中进一步完善 ...
- Vue.js 学习笔记 五 常用的事件修饰符
介绍几个常用的事件修饰符 直接上代码 <div id="divApp"><div class="divColor" v-on:click=&q ...
- freeRtos学习笔记 (5)事件组
freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...
- Vue学习笔记(六) 表单输入绑定
v-model 指令在表单元素上创建双向数据绑定,它负责用于监听用户输入事件以更新数据 注意,v-model 会忽略所有表单元素特性的初始值,而总是将 Vue 实例的数据作为数据来源 1.输入框 &l ...
- Vue.js 学习笔记 十 自定义按键事件
<div id="divApp"><!--任何键盘动作都会触发--><input type="text" v-on:keyup=& ...
- webAPI学习笔记2(DOM事件高级)
1. 注册事件(绑定事件) 1.1 注册事件概述 给元素添加事件,称为注册事件或者绑定事件. 注册事件有两种方式:传统方式和方法监听注册方式 传统注册方式 利用 on 开头的事件 onclick & ...
最新文章
- oracle分页置顶,[置顶] ibatis查询oracle分页
- wenbao与windows命令
- C# 动态加载 动态卸载
- [你必须知道的.NET]第三十四回,object成员,不见了!
- php如何编造简历,在简历里编造内容需要注意哪些问题?
- C++开发 面试问题总结(中兴、CVTE、瑞晟、华为、YY)
- 检查服务产生的core文件并做短信处理(shell)
- 数据结构(java语言描述)递归实现——汉诺塔问题
- TeaVM编译JAVA感想:看着简单,做起来真难
- 2012第二届GIS制图大赛——公开课技术问题答疑(珍贵资源哦!)
- Guass列主元、平方根法、追赶法求解方程组的C++实现
- 古罗马帝国莱茵河-多瑙河防线之谜
- java通过SMS短信平台实现发短信的功能
- html作品简介代码,HTML5的标签的代码的简单介绍 HTML5标签的简介
- html代码可以在dw用吗,HTML基础DW使用教程(示例代码)
- 超级简单的视频调色教程分享
- 【翻译】A Survey on Generative Diffusion Model(生成扩散模型的综述研究)
- 物联网毕设 -- 智能厨房检测系统
- 2019年3月16日山东省事业单位统考考题及解析(综合类)
- ping服务器ip地址ping不通
热门文章
- Justinmind使用教程(2)——计算表达式及条件使用方法
- lightdm .service: Start request repeated too quickly. grub正常,不显示登录和桌面 Endeavour
- Docker无法启动start request repeated too quickly for docker.service
- 定位技术--蜂窝基站
- Kruskal vs Borůvka
- mac添加应用程序到启动台_如何在Mac上启动应用程序
- openwrt reboot流程
- 【寻找最佳小程序】12期:小程序数据助手——微信官方打造,移动端数据分析工具...
- from scipy.misc import comb ImportError: cannot import name ‘comb‘
- Windows邮件添加QQ邮箱