关于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 ...
随机推荐
- how-to-add-global-asp-net-web-api-filters
要实现给mvc 和api 接口全局添加日志统计,web api添加的方式有些不同 FilterConfig.cs 页面 public class FilterConfig { public stati ...
- 初学Spring
Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油 以下是一个简单的应用Spring框架的java程序 src\dayday\HelloSpring.java ...
- MySQL数据库3 - MySQL常用数据类型
一. MySql常用数据类型 数据类型:整数(tinyint smailint int bigint) 定点数 decimal(p,s) ------ 小数点位置固定的 ---> 数 ...
- jQuery从无知到无所不知
说明: 本文以读书笔记的方式整理jQuery的重要知识点,言简意赅,一语中的,删繁就简,引人入胜. 本文先对jQuery强大的功能作一系统的介绍,再详细整理jQuery的选择器.过滤器.DOM操作.事 ...
- Kali安装小问题解决及一些设置
昨天按照完Kali linux之后,更改了镜像源, 然后运行了 apt-get update && apt-get dist-upgrade 发现要 等大约两个小时才能跟新完毕.. 于 ...
- MySQL中的while、repeat、loop循环
循环一般在存储过程和存储函数中使用频繁,这里只给出最简单的示例 while delimiter $$ create procedure test_while() begin declare sum i ...
- softwareTesting_work2_question1
input类 package com.Phantom; import java.util.ArrayList; import java.util.HashMap; import java.util.L ...
- 向peersim开火!P2P开火!(安装和样例运行)
根据导师的要求,这次的任务是要模拟一个类似BT网络的P2P网络,并实现一些算法,查了些资料,都说NS2对于P2P网络的模拟和支持都不好,基本没有模板可以用,而且效率很低,只能模拟几万个节点左右,看到挺 ...
- Win10/UWP开发—使用Cortana语音指令与App的前台交互
Win10开发中最具有系统特色的功能点绝对少不了集成Cortana语音指令,其实Cortana语音指令在以前的wp8/8.1时就已经存在了,发展到了Win10,Cortana最明显的进步就是开始支持调 ...
- C#异常语句
try: 用于检查发生的异常,并帮助发送任何可能的异常. catch: 以控制权更大的方式处理错误,可以有多个catch子句. finally :无论是否引发了异常,finally的代码块都将被执行. ...