编程语言
首页 > 编程语言> > 【C# 数据结构】List<T>和ObservableCollection<T> 区别以及互转

【C# 数据结构】List<T>和ObservableCollection<T> 区别以及互转

作者:互联网

在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接口。

 

List<T>与ObservableCollection<T>的用法基本上是一样的。

区别:

List<T>:

当T继承于INotifyPropertyChanged时,如果list<T>中的属性发生改变,则通知UI属性值已发生改变。但当list<T>添加一项时,list<T>就无法通知前端UI了(此时,ObservableCollection<T>闪亮登场)。

ObservableCollection<T>:

当ObservableCollection<T>添加一行时,会自动通知绑定该ObservableCollection<T>的控件并做相应修改。如果希望当ObservableCollection<T>中的属性发生改变时通知UI,则T也需要继承于INotifyPropertyChanged。


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

标签:ObservableCollection,INotifyPropertyChanged,改变,C#,List,集合,UI,互转
来源: https://www.cnblogs.com/cdaniu/p/16379333.html