关于databinding的细节
原文在此:http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial
完整译文在此:http://www.cnblogs.com/lichence/archive/2012/02/17/2356001.html
译不下去的笔记在此:
System.Windows.Forms.BindingSource是2.0里边的一个新类。赶脚微软想用BindingSource取代以前的CurrencyManager和BindingContext,所以本篇就只讲讲BingdingSource。
首先:
- Control.DataBindings集合持有所有Binding的对象,每个Binding的对象都有一个属性DataSource,用来标明Object的type;
- ListBox/DataGridView等的DataSource,可以是Object
- BindingSource类,有DataSource属性。
so,DataSource到底是干嘛的?……在现实编码中,通常用BindingSource实例作为Bindings对象们的DataSource属性的值,Binddings[x].DataSource is BindingSource。
如果你用数据库,那么这个BindingSource.DataSource通常是DataSet,如果不用数据库,那它很可能是一个自定义类的实例。
使用data binding的方法千千万,最常用之一:给一个Control的DataSource绑一个BindingSource对象。
可以认为BindingSource是一个二合一的数据源。二合一通常意味着:
- 有一个叫Current的Object实例,Control的某属性可以绑定到这个Current对象的某属性上。
- 有一个实现了IList的列表,里边全是和Current一样类型的对象。List是BindingSource的只读属性,用来返回一个内部列表(如果没设置DataMember的话),或者返回一个外部列表(如果设置了DataMember)。Current总是这个List的一员,要么是null。当设置该DataSource为一个单一的实例时,这个列表就只包含这个唯一的Object。
控件不同数据绑定的方式也有不同:
- ComboBox和ListBox使用DataSource和DisplayMember绑定一个List。先将DataSource赋值为BindingSource对象,然后设置DisplayMember属性为Current的某个属性。
- DataGrid和DataGridView使用DataSource属性绑定一个List。这俩控件没有DisplayMember属性。DataGridView有一个DataMember的属性,它看起来和BindingSource的DataMember很相似。如果DataSource不是BindingSource的话,就要用DataGridView.DataMember来设置数据源。如果DataSource是BindingSource,还是得用BindingSource的DataMember。
- TextBox/Button/CheckBox这类简单的控件,通过Control.DataBindings集合将自身绑定到数据源的Current对象的某一属性上。
* grid什么的它们的DataBindings属性,即使有东西,也是无用的。这个要注意。
再简化一下也就是两种绑定方式,一个是通过Control.DataSource=,一个是Control.DataBindings.Add()。
常用于绑定的属性包括:
- CheckBox和RadioButton的Checked;
- ComboBox/ListBox/ListView的SelectedIndex
- ComboBox/ListBox的SelectedValue
- 控件的Enable/Visible
- 控件的Text
Tips: ListView和TreeView的内容是不能绑定的(天怒人怨),它的SelectIndex和Enable这样的属性可以绑定。(天怒人怨)
……
•The latter handler (Binding.Target_Validate) passes the new value through a couple of internal classes, BindToObject and ReflectPropertyDescriptor, the latter of which uses Reflection to actually change the value in the Airplane and then call base.OnValueChanged in its base class, PropertyDescriptor.
这里貌似是讲到TextBox的Validate事件才传新值进行binding的同步。(相关:为什么只有textbox lose focus以后,数据才会刷新??)
txtModel.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
默认值是OnValidated
关于databinding的细节的更多相关文章
- 1. DataBinding - offical tutorial
1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- vue2.0实践的一些细节
最近用vue2.0做了个活动.做完了回头发现,好像并没有太多的技术难点,而自己好像又做了比较久...只能说效率有待提升啊...简单总结了一些比较细节的点. 1.对于一些已知肯定会有数据的模块,先用一个 ...
- 深入理解JS 执行细节
javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...
- javaScript中的小细节-script标签中的预解析
首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...
- 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节
1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...
- android黑科技——完美解决界面逻辑的数据框架DataBinding(最新)的使用(二)
昨天我们一起学习了dataBinding的基础用法,我想你可能还停留在它只是不用再findViewById,其实不然,今天我们就来扩展延伸,看看这个框架到底有什么魔力让谷歌官方大力推崇.这里还没看昨天 ...
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...
- Debug Databinding Issues in WPF
DataBinding is one of the most powerful features in WPF. But because it resolves the bindings at run ...
随机推荐
- Ionic 2 rc 添加第三方的插件(plugin) 以Echarts为例
Ionic2 在升级RC版之后做了很多改变,本文就使用Echarts 图表插件为例.记录一下如何引用第三方插件备忘. 一.再集成终端中使用NPM安装Echarts npm install echart ...
- iOS应用性能调优好文mark
http://www.cocoachina.com/ios/20150408/11501.html
- 支持向量机(SVM)——python3实现
今天看完soft-margin SVM就又搜了下相关的代码,最后搜到这个,第一次看懂了SVM的实现. 关于代码中cvxopt的使用,可以看下这个简单的介绍. 这里还是将代码贴在这里,里面加了自己的一下 ...
- 用vc生成可被python调用的dll文件
前提已经有.c 和.i文件 用swid编译了.i文件生成了wrap.c文件和.py文件 vc创建dll工程 将.h加入到头文件中.c文件和wrap.c文件添加到源文件中 将.i文件添加到工程目录下To ...
- BackTrack5-r3安装中文版的firefox火狐浏览器
在BT终端中输入:sudo apt-get install firefox 按回车在火狐地址栏里输入"about:config" 回车,点我同意.然后在过滤器里输入"ge ...
- Thinkphp_基础(2)URL模式
URL请求 ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块.控制器和操作,下面是一个标准的URL访问格式: http://se ...
- OD调试17
程序先出现一个nag 然后出现主窗口 然后出现第二个nag窗口 我们查个壳 没有壳 那就载入OD看看,继续用调用堆栈的方法 发现一直执行用的都是这一个call,最后执行到程序结束.之 ...
- Win10/UWP新特性—Drag&Drop 拖出元素到其他App
在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...
- Ansible-Tower快速入门-7.配置实时事件【翻译】
配置实时事件 在tower的菜单中,在接近用户菜单处有一个带有颜色的小点,这个带颜色的小点显示tower的实时事件功能的状态 如果这个小点是绿色的,表示运行正常,如果这个小点是红色或橙色,表示实时事件 ...
- java编程经验积累
1.java批量删除checkbox中选中的对象-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn.net/topics/360223125 2.重定向与转发路 ...