在WPF ,SilverLight中常常會用到List<T>和ObservableCollection<T>。這裏簡單講一下他們之間的相互轉換。html
1.List<T>的簡單介紹:數組
List<T>表明的是強類型的Ojbect集合,能夠經過索引訪問而且提供了查找、排序以及操做此集合的方法。List基本上和ArrayList相同,它用數組的方式實現了接口IList而且他的大小能夠根據須要來自動增長。函數
List<T>的缺點post
在使用ASP.NET開發時,咱們簡單的使用DataSource和DataBind來綁定數據,可是在SilverLight中就沒有那麼簡單了。在ASP.NET中,綁定操做只是單向的。綁定操做一旦完成若是再想改變值的話,你必須得彈出一個已經賦值須要修改的對話框或者直接在表單上修改,最後再調用方法DataBind,這樣的操做特別的麻煩。url
2.ObservableCollection的介紹:htm
ObservableCollection是動態數據集合而且當集合中新增、修改或者刪除項目時,或者集合被刷新時,都有通知機制(經過實現接口INotifyCollectionChanged)。對象
ObservableCollection的缺點blog
當集合中的屬性中改變時沒有提供任何的通知機制。在程序運行的過程當中,經過新增、刪除或者改變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));