Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象
原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象
原创文章,如需转载,请注明出处。
最近在一直研究Silverlight下的数据绑定控件,发现有这样两个接口IEditableObject 和IEditableCollectionView,记录一下结论,欢迎交流指正。
本文会重点介绍在构建Silverlight自定义数据绑定控件的过程中,我们会对数据源进行操作,那么就会碰到上述两个接口,如何正确的处理它们。
1. IEditableObject
我在MSDN上查了一下,这个概念早在.Net 1.0的时候就提出了,但是我一直没有关注过这个东东。
What is IEditableObject?
IEditableObject is used to represent an object that has an editing mode and the ability to commit or revert changes.
UseCase:When a validation error occurs in a cell, user can back out of changes using Escape key. However if user has made changes to other columns in same row, those changes will still persists.User may wish to back out of all changes. This is where IEditableObject interface comes into play. IEditableObject is used to represent an object that has an editing mode and the ability to commit or revert changes.
Definition:
public interface IEditableObject
{
void BeginEdit();
void CancelEdit();
void EndEdit();
}
简单来说IEditableObject就是具有编辑模式,并且支持整体提交和回滚值的对象。比如一个数据行对象,你可以更改其多个列的值,在没有提交者前,都可以通过CancelEdit进行回滚。
通过一个简单的Memo模式就可以实现这个对象。
2. IEditableCollectionView
这个概念是在WPF3.5 SP1的时候才引入,目的是提供一个具有事务能力的集合类。
IEditableCollectionView is a new collection view that you can use to supports adding and removing new items, as well as editing items in a transactional way. It is implemented by ListCollectionView (the default view for ObservableCollection) and BindingListCollectionView (the default view for DataTable).
Definition:
public interface IEditableCollectionView
{
bool CanAddNew { get; }
bool CanCancelEdit { get; }
bool CanRemove { get; }
object CurrentAddItem { get; }
object CurrentEditItem { get; }
bool IsAddingNew { get; }
bool IsEditingItem { get; }
NewItemPlaceholderPosition NewItemPlaceholderPosition { get; set; } object AddNew();
void CancelEdit();
void CancelNew();
void CommitEdit();
void CommitNew();
void EditItem(object item);
void Remove(object item);
void RemoveAt(int index);
}
这两个接口的关系:
When the data Item implements IEditableObject, the IEditableCollectionView will call BeginEdit() when a new item is added or an existing item is opened for edit. It will call CancelEdit() when the item is cancelled and EndEdit() when the item is committed. IEditableCollectionView lets the app author handle this part of the transaction.
换句话说就是,如果IEditableCollectionView发现其Item实现了IEditableObject接口,会在它的EditItem,CommitEdit以及CancelEdit方法中调用子Item的BeginEdit,EndEdit和CancelEdit方法。
3. 自定义数据绑定控件应该如何处理这两个接口
IEditableObject
如果数据绑定控件发现当前行绑定的对象是IEditableObject,那么在该行上如果有一个Cell进入编辑状态,并且是第一个单元格的时候,就需要调用绑定对象的BeginEdit方法。
当某一行上某一个Cell处于编辑状态的时候,Press Esc,该Cell会退出编辑状态,值也会回滚。注意这个时候不会调用IEditableObject的CancelEdit方法,这是Cell本身应该提供的行为。这个时候IsEdit为False,但是Row拥有焦点,继续Press Esc,会调用IEditableObject的CancelEdit方法,你会发现其他列的值也会回滚。
当某一行上某一个Cell处于编辑状态的时候,鼠标点击其他行,该Cell会退出编辑状态。只是会调用IEditableObject的EndEdit方法。
IEditableCollectionView
对于IEditableCollectionView来说,EditItem,CommitEdit还有CancelEdit方法分别对应着IEditableObject接口的BeginEdit,EndEdit和CancelEdit,调用时机完全一样。
数据绑定控件如果其数据源是IEditableCollectionView, 在处理BeginEdit,EndEdit和CancelEdit的时候应该直接调用CollectionView的相应方法,这个时候就不需要在处理 IEditableObject接口了,IEditableCollectionView内部会调用该接口。
只有在其数据源不是IEditableCollectionView的时候,如果Row绑定对象是IEditableObject,需要调用IEditableObject的接口实现。
这样的话,自定义数据绑定控件就可以完美支持这两个接口了。
说明:以上描述是以Silverlight DataGrid为例,自定义控件类似。
Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象的更多相关文章
- 自定义组合控件,适配器原理-Day31
自定义组合控件,适配器原理-Day31 mobile2.1 主页定义 手机上锁功能 1.弹出设置密码框. 手机下载进度 自定定义控件 控件的属性其实就是控件类一个属性设置属性调用类的set方法方法, ...
- C# DataGridView自定义分页控件
好些日子不仔细写C#代码了,现在主要是Java项目,C#.Net相关项目不多了,有点手生了,以下代码不足之处望各位提出建议和批评. 近日闲来无事想研究一下自定义控件,虽然之前也看过,那也仅限于皮毛,粗 ...
- 027. asp.net中数据绑定控件之 GridView控件
GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...
- (九)ASP.NET自定义用户控件(2)
http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...
- ASP.NET数据绑定控件
数据绑定控件简介 数据绑定分为:数据源 和 数据绑定控件 两部分,数据绑定控件通过数据源来获得数据,通过数据源来隔离数据提供者和数据使用者,数据源有:SqlDataSource,AccessDataS ...
- 【转】ASP.NET常用数据绑定控件优劣总结
转自:http://www.cnblogs.com/Olive116/archive/2012/10/24/2736570.html ASP.NET常用数据绑定控件优劣总结 本文的初衷在于对Asp ...
- ASP.NET数据绑定控件简介
•数据绑定分为数据源和数据绑定控件两部分(①数据绑定控件通过数据源获取和修改数据②数据绑定控件通过数据源隔离数据提供者和数据使用者)数据绑定控件→数据源→数据库•数据源:SqlDataSource(连 ...
- asp.net学习之 数据绑定控件--List数据绑定控件
原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...
- asp.net学习之数据绑定控件、数据源控件概述
原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细: ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...
随机推荐
- 被误解的MVC和被神化的MVVM
MVC 的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架 ...
- 【习题 5-7 UVA - 12100】Printer Queue
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用队列和multiset就能完成模拟 [代码] #include <bits/stdc++.h> using names ...
- [spark]Spark Streaming教程
(一)官方入门示例 废话不说,先来个示例,有个感性认识再介绍. 这个示例来自spark自带的example,基本步骤如下: (1)使用以下命令输入流消息: $ nc -lk 9999 (2)在一个 ...
- 【物理/数学】—— 概念的理解 moment、momentum
moment:矩,momentum:[物] 动量:动力:冲力: 数学意义上的 moment(矩)概念其实源自于物理范畴.首先我们来介绍物理学意义上的矩(Momentum)的概念. 1. 物理学意义上的 ...
- IDC报告:从IaaS到PaaS,阿里云主导云计算市场
11月7日,著名国际研究机构IDC发布了2017年上半年中国公共云PaaS市场调研结果,阿里云以27%的份额保持压倒性领先,是第二名的近三倍.结合IDC上一份IaaS市场的报告(阿里云第一,占比47. ...
- Vmware P2V 清除被隱藏網卡佔用的的IP
修改註冊表也可以讓非正常卸載的網卡釋放捆綁的固定的IP地址,註冊表中定位於中:HKEY_LOCAL_MACHINE \SYSTEM\ CurrentControlSet\Services\Tcpip\ ...
- 【HDU】病毒侵袭(AC自己主动机模板题)
AC自己主动机的模板题.因为输入的字符串中的字符不保证全为小写字母.所以范围应该在130之前,而前31位字符是不可能出如今字符串的(不懂得查下ACSII表即可了).所以仅仅须要开的结点数组大小为130 ...
- MySQL误删数据救命指南
预防误操作导致文件/数据丢失的建议: 1.欲删除文件时,将rm命令改成mv,可在系统层面将rm命令做个alias(或参考Windows / Mac OSX做法,删除文件时先进回收站).2.删除数据库. ...
- (九)RabbitMQ消息队列-通过Headers模式分发消息
原文:(九)RabbitMQ消息队列-通过Headers模式分发消息 Headers类型的exchange使用的比较少,以至于官方文档貌似都没提到,它是忽略routingKey的一种路由方式.是使用H ...
- 三大主流ETL工具选型 分类: H2_ORACLE 2013-08-23 11:17 426人阅读 评论(0) 收藏
ETL(extract, transform and load)产品乍看起来似乎并不起眼,单就此项技术本身而言,几乎也没什么特别深奥之处,但是在实际项目中,却常常在这个环节耗费太多的人力,而在后续的维 ...