2010-07-02 66 views
6

我有一個測試集設置爲:有沒有辦法將可觀察集合轉換爲常規集合?

ObservableCollection<Person> MyselectedPeople = new ObservableCollection<Person>(); 

public MainWindow() 
    { 
     InitializeComponent(); 
     FillData(); 
    } 

public void FillData() 
    { 
     Person p1 = new Person(); 
     p1.NameFirst = "John"; 
     p1.NameLast = "Doe"; 
     p1.Address = "123 Main Street"; 
     p1.City = "Wilmington"; 
     p1.DOBTimeStamp = DateTime.Parse("04/12/1968").Date; 
     p1.EyeColor = "Blue"; 
     p1.Height = "601"; 
     p1.HairColor = "BRN"; 

     MyselectedPeople.Add(p1); 
    } 

一旦我有這個集合來構建我希望能夠觀察集合轉換爲類型列表。

這背後的原因是我的主要項目是接收數據的通用列表,我必須將其轉換爲Observable集合,以便在gridview,listbox等中使用。在UI中選擇數據,然後將其發送回始發程序集以供進一步使用。

回答

10

我覺得這樣做的最快的方法是使用LINQ。

List<Person> personList= MySelectedPeople.ToList(); 

乾杯。

8

請嘗試以下

var list = MyselectedPeople.ToList(); 

請確保您有System.Linq爲您使用的語句之一。

5

這應該這樣做...

List<Person> myList = MyselectedPeople.ToList<Person>(); 
+2

+1不使用'var'就像它不合時宜。 – Shibumi 2011-03-28 22:12:44

4

我只是想指出的是,除了明顯的LINQ的擴展方法,名單一直有一個重載需要一個IEnumerable<T>

return new List<Person>(MyselectedPeople); 
2

很奇怪,你的後端組件編碼爲只接受List<T> 。這是非常嚴格的,並且阻止你做有用的事情,比如傳遞數組,ObservableCollection<T>Collection<T>ReadOnlyCollection<T>Dictionary<TKey, TValue>的Keys或Values屬性或任何其他類似列表的任何其他事物那裏。

如果可能,請將後端程序集更改爲接受IList<T>。然後,您可以直接傳入ObservableCollection<T>,而無需將其內容複製到List<T>

+1

我見過遺留的庫或第三方組件,設計得很差,經常發現他的問題很奇怪。 – 2010-07-03 05:37:00