数据绑定模式共有四种:OneTime、OneWay、OneWayToSource和TwoWay,默认是TwoWay。一般来说,完成数据绑定要有三个要点:目标属性是依赖属性、绑定设置和实现了INotifyPropertyChanged接口的数据源(数据上下文)。

OneTime:一次性有效,之后数据源的变化不会对目标属性有任何影响;当然,目标属性的改变也不对数据源有影响。代码如下

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox1" Text="{Binding Path=MyName, Mode=OneTime}" VerticalAlignment="Top" Width="120" />

OneWay:单向作用,数据源的改变会反映到目标属性上;但目标属性的改变不对数据源有影响。代码如下:

  <TextBox Height="23" HorizontalAlignment="Left" Margin="176,83,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" Text="{Binding Path=MyName, Mode=OneWay}" />

OneWayToSource:单向作用,跟OneWay的方向相反,目标属性的改变会更新到数据源上;但数据源的更新不会通知目标属性。在这种模式下,目标属性值初始状态一般为空,因为数据源的值对其不起作用。代码如下:

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox3" Text="{Binding Path=MyName, Mode=OneWayToSource}" VerticalAlignment="Top" Width="120" />

TwoWay:双向作用,即目标属性的改变会更新到数据源上,数据源的更新也会通知目标属性。这是绑定的默认方式,可以省略。代码如下:

  <TextBox Height="23" HorizontalAlignment="Left" Margin="174,38,0,0" Name="textBox4" Text="{Binding Path=MyName}" VerticalAlignment="Top" Width="120" />

到此这几种模式就介绍完了。不过,我这里还有个有趣的问题:如果数据源没有实现INotifyPropertyChanged接口,这几种模式还能正常工作吗?我做了一些尝试,得出的结论是:

  1、OneTime模式根本不受影响;

  2、如果在后台代码中更改了数据源,目标属性不会得到通知;

  3、如果在界面上更改目标属性,数据源会收到更新通知。

不实现INotifyPropertyChanged接口的数据源到底有没有意义,以及为什麽会出现以上的现象,我还需要深入研究。

WPF学习笔记:(二)数据绑定模式与INotifyPropertyChanged接口的更多相关文章

  1. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  2. WPF学习笔记:MVVM模式下,ViewModel如何关闭View?

    原文:http://blog.csdn.net/leftfist/article/details/32349731 矫枉过正,从一个极端走向另一个极端.MVVM模式,View只负责呈现,虽然也有后台代 ...

  3. WPF学习笔记二 依赖属性实现原理及性能分析

    在这里讨论依赖属性实现原理,目的只是学习WPF是怎么设计依赖属性的,同时更好的使用依赖属性. 首先我们来思考一个简单的问题:我们希望能验证属性的值是否有效,属性变更时进行自己的处理.回顾一下.net的 ...

  4. WPF学习笔记二之依赖属性

    1.快捷生成依赖属性:propdp然后按两次tab键 2.应用场景:自定义控件 什么是依赖属性:依赖属性自己没有值,通过依赖别人(如Binding)来获得值. 依赖属性为什么会出现:控件常用字段有限, ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  7. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  9. kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

随机推荐

  1. How to use WinSCP with public key authentication

          http://www.techrepublic.com/blog/it-security/how-to-use-winscp-with-public-key-authentication/ ...

  2. Snmp常用oid

    http://blog.csdn.net/youngqj/article/details/7311849 系统参数(1.3.6.1.2.1.1)   OID 描述 备注 请求方式 .1.3.6.1.2 ...

  3. Yii学习笔记之四(表单验证 api 翻译)

    1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数  yii\base\Model::validate()  进行验证 他会返回boolean值的 ...

  4. C#趣味程序---个位数为6,且能被3整出的五位数

    using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int ...

  5. ie7easyui的书写要规范

    在书写easyui对象的属性,有时候习惯在,属性的末尾再加一个“,”,这个在高版本浏览器是没事的,但是在ie7及以下,会有报错

  6. Java 出现内存溢出的定位以及解决方案

    在上一节中Java虚拟机内存分布   说了Java虚拟机中分为五个区域,而且也知道了在Java程序计数器区域不会出现OOM(OutOfMemeryError),那么以下就对除了程序计数器以外的四个区域 ...

  7. cellForRowAtIndexPath 设置图片

    #import "UIImageView+MJWebCache.h" #import "MJPhotoBrowser.h" #import "MJPh ...

  8. Azure 与 AI

    微软 Build 2017 开发者大会:Azure 与 AI 的快速发展   欢迎大家持续关注葡萄城控件技术团队博客,更多更好的原创文章尽在这里~~ 一年一度的微软 Build 大会准时起航,本年度大 ...

  9. idea-环境配置

    显示行号 Settings->Editor->Appearance标签项,勾选Show line numbers 关闭导航 在idea14版本中,上面有个代码导航,show breadcr ...

  10. 【30.00%】【vijos 1909】寻找道路

    描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 的情 ...