在WPF , silverlight ,WP7中经常会用到List<T>和ObservableCollection<T>。这里简单讲一下他们之间的相互转换。

1.List<T>的简单介绍:

List<T>代表的是强类型的Ojbect集合,可以通过索引访问并且提供了查找、排序以及操作此集合的方法。List基本上和ArrayList相同,它用数组的方式实现了接口IList并且他的大小可以根据需要来自动增加。

List<T>的缺点

在使用ASP.NET开发时,我们简单的使用DataSource和DataBind来绑定数据,但是在SilverLight中就没有那么简单了。在ASP.NET中,绑定操作只是单向的。绑定操作一旦完成如果再想改变值的话,你必须得弹出一个已经赋值需要修改的对话框或者直接在表单上修改,最后再调用方法DataBind,这样的操作特别的麻烦。

2.ObservableCollection的介绍:

ObservableCollection是动态数据集合并且当集合中新增、修改或者删除项目时,或者集合被刷新时,都有通知机制(通过实现接口INotifyCollectionChanged)。

ObservableCollection的缺点

当集合中的属性中改变时没有提供任何的通知机制。在程序运行的过程中,通过新增、删除或者改变ObservableCollection集合中的数据时,只有新增和删除数据时,UI集合(DataGrid)中的数据才改变。但是在修改集合中已经存在的数据时UI层的数据却不能改变。

3.这里不得不提一下子INotifyPropertyChanged,它不是集合,只是一个接口。在类中提供一个事件PropertyChanged,当属性的值发生改变时通知客户端。如果对象的状态发生改变时(新增、修改、删除)将触发事件PropertyChange指向那些已经发生改变的集合。

ObservableCollection能通知他变化了也正是因为它实现了INotifyPropertyChanged接口。只是微软给出了具体的实现,如果要写List需要自己实现 INotifyPropertyChanged接口,

说了这么多,言归正传,对于它们互换:
T tList = new List(tObjectStruct .ToList());  
ObservableCollection tObjectStruct  = new ObservableCollection(tList);  
都在构造函数中即可完成
也可以:
tList.ForEach(p => tObjectStruct.Add(t));

转载于:https://www.cnblogs.com/zjoch/archive/2011/12/08/2281075.html

List和ObservableCollection的相互转化相关推荐

  1. 来看看C# ObservableCollection和List的区别

    聊聊C# ObservableCollection和ListObservableCollection这个类的方法,对数据的操作很少,重点放在了当自己本事变化的时候(不管是属性,还是集合)会调用发出通知 ...

  2. java中图片和字节数组相互转化

    java中图片和字节数组相互转化 方案一:使用ImageIO来实现 将图片转化为字节数组 /*** 通过图片路径将图片文件转化为字符数组* * @param url 图片路径* @return byt ...

  3. NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化

    NSArray *array = @[ @1, @2, @3, @4, @5, @3 ];// 1. NSArray与NSData相互转化// NSArray to NSDataNSError *er ...

  4. python打开json文件变为字典_Python json读写方式和字典相互转化

    在Python中,json指的是符合json语法格式的字符串,可以单行或者多行. 它可以方便的在使用在多种语言中,这里介绍的是在python中的字典(dict)与json字符串相互转化的方式. 1. ...

  5. Silverlight实用窍门系列:47.Silverlight中元素到元素的绑定,以及ObservableCollection和List的使用区别...

    问题一:在某一些情况下,我们使用MVVM模式的时候,对于某一个字段(AgeField)需要在前台的很多个控件(A.B.C.D.E)进行绑定,但是如何能够让我们后台字段名改变的时候能够非常方便的改变所有 ...

  6. strcut结构体和char型数组的相互转化

    原文:https://blog.csdn.net/mercy_ps/article/details/82226566 strcut结构体和char型数组的相互转化 2018年08月30日 19:24: ...

  7. 罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化

    罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化 1 罗德里格斯公式推导 2 cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化 1 罗德里格 ...

  8. 如何在Jupyter notebook中运行python的.py文件,以及ipynb文件与py文件的相互转化

    文章目录: 1 Jupyter notebook中%开头的一些方法使用 1.1 运行python的py文件 1.2 加载本地文件 2 ipynb文件与py文件的相互转化 2.1 jupyter not ...

  9. win10 ObservableCollection 排序自动收缩问题

    ObservableCollection本身是没有排序Sort功能的,不过我们可以通过冒泡排序来实现,以下是扩展功能: public static void Sort<T>(this Ob ...

最新文章

  1. delphi webbrowser 经常用法演示样例
  2. Servlet 3的异步Servlet功能
  3. Nagios添加主机监控失败-故障小结
  4. 【转】oracle 和 ' 特殊字符处理 ( like 'GAC/_%' escape ''; 这里面的 / 居然将 转义了 为什么?)...
  5. C#性能优化篇 - 基于索引器封装EPList
  6. 如何在C/C++中动态分配二维数组
  7. 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
  8. python神经网络库识别验证码_基于TensorFlow 使用卷积神经网络识别字符型图片验证码...
  9. 两台虚拟服务器如何串联,服务器主机多台串联
  10. 《UnityAPI.RenderTexture渲染纹理》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+RenderTexture+isCubemap+立钻哥哥++OK++)
  11. 镜头主要参数与光 源 选 型,选型焦距计算公式,CS、C接口工业镜头与M12镜头的关系知识。
  12. Python Django 基本创建 App创建
  13. Ubuntu服务器上运行mma,一、MMA概述
  14. 信息技术计算机说课,信息技术说课稿
  15. 【科学常识】之《木桶效应》
  16. SQL server 嵌套查询
  17. 微信扫码登录(new WxLogin)-二维码样式修改
  18. C++文件操作API函数介绍
  19. Allegro中尺寸标注显示小数点后位数
  20. CAD教程:CAD软件中如何进行CAD视口设置?

热门文章

  1. 2022-2028年中国二次供水设备行业研究及前瞻分析报告
  2. Docker入门六部曲——Stack
  3. 2022-2028年中国氟橡胶产业竞争现状及发展前景分析报告
  4. java集合中对象某属性比较排序
  5. ttf,woff2字体转化为png图片,python读取图片
  6. 本机无法访问虚拟机上的nignx
  7. 三段式LLVM编译器
  8. Apollo 自动驾驶开发套件(D-KIT)
  9. 基于TensorRT的BERT实时自然语言理解(上)
  10. MySQL开启远程连接权限