.NET 数据绑定学习

数据绑定是一种设置窗体上任何控件的任何运行时可访问属性的自动方法。

 

要由数据源作者实现的接口:

1、IList接口:将仅在运行时用于绑定。

2、IBindingList 接口:此实现在列表项更改时(例如,客户列表中的第三项更改了 Address 字段)和列表本身更改时(例如,列表中项的数量增加或减少)都提供基本的排序功能和更改通知。

3、IBindingListView 接口:提供 IBindingList 实现的所有功能以及筛选和高级排序功能。此实现使用属性说明符/方向对提供基于字符串的筛选和多列排序能力。

4、IEditableObject 接口:允许对象控制对该对象进行的更改何时成为永久更改。此实现提供BeginEditEndEditCancelEdit 方法,这些方法使您得以回滚对对象进行的更改。

  • BeginEdit 方法发出开始对一个对象进行编辑的信号。实现此接口的对象需要存储 BeginEdit 方法调用后的任何更新,这样,如果调用 CancelEdit 方法,则可以放弃这些更新。在数据绑定 Windows 窗体中,可以在单个编辑事务的范围内多次调用 BeginEdit(例如,BeginEditBeginEditEndEdit)。IEditableObject 的实现应当跟踪 BeginEdit 是否已被调用,并忽略对 BeginEdit 的后续调用。因为可多次调用此方法,所以对它的后续调用应是非破坏性的,这一点很重要;即,对 BeginEdit 的后续调用不能损坏已进行的更新或更改在第一次调用 BeginEdit 时保存的数据。
  • 如果对象当前处于编辑模式,EndEdit 方法会将自调用 BeginEdit 后进行的任何更改都保存到基础对象中。

  •  CancelEdit 方法放弃对对象所做的任何更改。

5、ICancelAddNew 接口:通常实现 IBindingList 接口,并允许您回滚用AddNew方法向数据源添加的数据。

6、 IDataErrorInfo 接口:允许对象向绑定控件提供自定义错误信息。

  • Error属性返回常规错误信息文本(例如,“出现错误”)。
  • Item属性返回一个包含来自列的具体错误信息的字符串(例如,“State 列中的值无效”)。

7、IEnumerable 接口:通常由 ASP.NET 使用。只能通过BindingSource组件来使用 Windows 窗体对此接口的支持。BindingSource 组件将所有的 IEnumerable 项复制到一个单独的列表中以实现绑定。

8、 ITypedList 接口:提供控制向绑定控件公开的属性集以及这些属性的顺序。

9、ICustomTypeDescriptor 接口:提供有关其自身的动态信息。此接口与 ITypedList 类似,但是它用于对象(而非列表)。

10、IListSource 接口:在非列表对象上启用基于列表的绑定。IListSourceGetList 方法用于从某个对象返回可绑定的列表,该对象不从 IList 继承。IListSourceDataSet 类使用。

11、IRaiseItemChangedEvents 接口:用于指示类型是否通过其 RaisesItemChangedEvents 属性引发 ItemChanged 类型的 ListChanged 事件。

  • 如果数据源提供用来列出前面描述的事件转换的属性,并且与 BindingSource 组件进行交互,则应当实现 IRaiseItemChangedEvents。否则,BindingSource 还将执行用来列出事件转换的属性,这将导致性能下降。

12、ISupportInitialize 接口:实现此接口的组件利用批处理优化来设置属性并初始化共存属性。ISupportInitialize 包含两种方法:

  • BeginInit 发出正在开始对象初始化的信号。

  • EndInit 发出正在完成对象初始化的信号。

13、ISupportInitializeNotification 接口:实现此接口的组件还实现 ISupportInitialize 接口。使用此接口,可以通知其他 ISupportInitialize 组件初始化已完成。ISupportInitializeNotification 接口包含两个成员:

  • IsInitialized 返回一个 boolean 值,该值指示组件是否已初始化。

  • Initialized 在调用 EndInit 时发生。

14、 INotifyPropertyChanged 接口: 实现此接口的类是一个在其任何属性值更改时都会引发事件的类型。此接口旨在替换控件的每个属性都有一个更改事件这种模式。用在 BindingList 中时,业务对象应当实现 INotifyPropertyChanged 接口。

  • 对于在被绑定客户端和数据源间的绑定中发生的更改通知,要么应当让绑定数据源类型实现 INotifyPropertyChanged 接口(首选方法),要么为绑定类型提供 propertyNameChanged 事件,但是不应同时选择这两种方法。

要由组件作者实现的接口

1、IBindableComponent 接口:实现此接口的类是支持数据绑定的非控件组件。此类通过该接口的 DataBindingsBindingContext 属性返回组件的数据绑定和绑定上下文。

  • 如果组件从 Control 继承,则无需实现 IBindableComponent 接口。

2、 ICurrencyManagerProvider 接口:实现 ICurrencyManagerProvider 接口的类是一个组件,该组件提供其自己的 CurrencyManager,用来管理与这个特定组件关联的绑定。对自定义 CurrencyManager 的访问是通过 CurrencyManager 属性提供的。从 Control 继承的类通过它的 BindingContext 属性自动管理绑定,因此,需要实现 ICurrencyManagerProvider 的情况相当罕见。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值