2010-04-22 36 views
3

在非Silverlight世界中,使用LINQ創建ObservableCollection很容易。這是因爲ObservableCollection類具有構造函數,它們接受任何IEnumerable 或T>列表< T>。但是,Silverlight版本沒有!這意味着代碼如: 如何在Silverlight中使用LINQ創建ObservableCollection

var list = (from item in e.Result 
      select new ViewModel(item)).ToList(); 

Items = new System.Collections.ObjectModel.ObservableCollection<ViewModel>(list); 

在Silverlight中不起作用。

除了使用for-each語句之外,還有其他選項可以使這項工作成爲可能嗎?

回答

1

好吧,如果你是使用Silverlight 4 工作試試這個:

public static class CollectionExtensions 
    { 
     public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll) 
     { 
      var c = new ObservableCollection<T>(); 
      foreach (var e in coll) 
       c.Add(e); 
      return c; 
     } 
    } 

中發現:http://forums.silverlight.net/forums/p/39487/262505.aspx

+0

我不知道這個不足已經在SL4中解決了,謝謝! – SonOfPirate 2010-04-22 16:31:28

+1

@sonofpirate:實際上,在SL​​4中,您可以刪除ToList,因爲「ObservableCollection 」上有一個構造函數,它需要'IEnumerable '。 – AnthonyWJones 2010-04-22 21:23:06

+0

非常好!我不能等到我們的綠燈升級到SL4! – SonOfPirate 2010-04-23 15:42:14

5

我不這麼認爲,但你可以把它清潔使用該擴展方法。

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> coll) { 
     var c = new ObservableCollection<T>(); 
     foreach (var e in coll) 
      c.Add(e); 
     return c; 
    } 
+0

除了另一個選項,這是我將要使用的方法。我只是希望有另一種更優雅的方式來完成它。 – SonOfPirate 2010-04-22 16:32:05

+0

@sonofpirate:在SL3中,這是非常好的方式,即使在SL4中,我也可能傾向於創建此擴展方法(儘管在實現中使用正確的構造函數)。 – AnthonyWJones 2010-04-22 21:25:14

相關問題