原文在此: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是一个二合一的数据源。二合一通常意味着:

  1. 有一个叫Current的Object实例,Control的某属性可以绑定到这个Current对象的某属性上。
  2. 有一个实现了IList的列表,里边全是和Current一样类型的对象。List是BindingSource的只读属性,用来返回一个内部列表(如果没设置DataMember的话),或者返回一个外部列表(如果设置了DataMember)。Current总是这个List的一员,要么是null。当设置该DataSource为一个单一的实例时,这个列表就只包含这个唯一的Object。

控件不同数据绑定的方式也有不同:

  1. ComboBox和ListBox使用DataSource和DisplayMember绑定一个List。先将DataSource赋值为BindingSource对象,然后设置DisplayMember属性为Current的某个属性。
  2. DataGrid和DataGridView使用DataSource属性绑定一个List。这俩控件没有DisplayMember属性。DataGridView有一个DataMember的属性,它看起来和BindingSource的DataMember很相似。如果DataSource不是BindingSource的话,就要用DataGridView.DataMember来设置数据源。如果DataSource是BindingSource,还是得用BindingSource的DataMember。
  3. TextBox/Button/CheckBox这类简单的控件,通过Control.DataBindings集合将自身绑定到数据源的Current对象的某一属性上。

* grid什么的它们的DataBindings属性,即使有东西,也是无用的。这个要注意。

再简化一下也就是两种绑定方式,一个是通过Control.DataSource=,一个是Control.DataBindings.Add()。

常用于绑定的属性包括:

  1. CheckBox和RadioButton的Checked;
  2. ComboBox/ListBox/ListView的SelectedIndex
  3. ComboBox/ListBox的SelectedValue
  4. 控件的Enable/Visible
  5. 控件的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. 1. DataBinding - offical tutorial

    1. DataBinding - offical tutorial android DataBinding tutorial 构建环境 数据与布局文件的绑定 data binding 表达式 数据对象 ...

  2. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  3. vue2.0实践的一些细节

    最近用vue2.0做了个活动.做完了回头发现,好像并没有太多的技术难点,而自己好像又做了比较久...只能说效率有待提升啊...简单总结了一些比较细节的点. 1.对于一些已知肯定会有数据的模块,先用一个 ...

  4. 深入理解JS 执行细节

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...

  5. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  6. 分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

    1:MSSQL SQL语法篇: BULK INSERT [ database_name . [ schema_name ] . | schema_name . ] [ table_name | vie ...

  7. android黑科技——完美解决界面逻辑的数据框架DataBinding(最新)的使用(二)

    昨天我们一起学习了dataBinding的基础用法,我想你可能还停留在它只是不用再findViewById,其实不然,今天我们就来扩展延伸,看看这个框架到底有什么魔力让谷歌官方大力推崇.这里还没看昨天 ...

  8. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  9. Debug Databinding Issues in WPF

    DataBinding is one of the most powerful features in WPF. But because it resolves the bindings at run ...

随机推荐

  1. hdu 2074

    ps:WA了好多次...因为首先是n=1的情况,其次是中心花色和外花色,中心花色也有可能是最外层花色....很无语. 然后就是格式问题咯. 代码 #include "stdio.h" ...

  2. 将DataTable导出到Excel

    /// <summary> /// 导出Excel /// </summary> /// <param name="dtData"></p ...

  3. WordPress博客平台的搭建--基于Ubuntu14服务器

    环境:阿里云服务器,系统Ubuntu14.04, 阿里云域名 大致流程:LNMP+WordPress 主要参考博客:VPS+LNMP+WordPress搭建个人网站/博客 遇到的问题: 1.在登陆域名 ...

  4. javaweb学习总结 servlet开发(一)

    转载:http://www.cnblogs.com/xdp-gacl/p/3760336.html 这里主要是将其加入自己的理解过一遍. 这里的代码全在eclipse java ee中执行的. 一.s ...

  5. IntelliJ IDEA注册码

    1.打开IJ,help选项下的register 2. 选择Activation code 将注册码粘到内容框里,点击ok即可 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QT ...

  6. JAVA学习遇到的问题:接口实现

    引用知乎看到对接口的总结: 接口就是个招牌比如说你饿了,看到前面有个挂着KFC的店,然后你想到可以进去买汉堡了.KFC就是接口,我们看到了这个接口,就知道这个店会卖汉堡(实现接口).那么为什么我们要去 ...

  7. C# 类:类型 , 数学:类型

    类(类型):   //.Length:获取字符串的长度,返回int型                        //.Trim去除字符串前后的空格                        / ...

  8. eclipse常用插件

    1. eclipse安装主题插件:http://www.eclipsecolorthemes.org/ 2. eclipse terminal插件:在eclipse中集成终端,使用非常方便,不用单独打 ...

  9. 在Sublime Text 3 中安装SublimeLinter,Node.js进行JS&CSS代码校验

    转载自:http://www.wiibil.com/website/sublimelinter-jshint-csslint.html 在Sublime Text中安装SublimeLinter,No ...

  10. MySQL 配置

    MySQL 配置 1.服务启动: (1)使用 service 启动:service mysqld start (2)使用 mysqld 脚本启动:/etc/inint.d/mysqld start ( ...