20

有没有办法在不遍历列表并将项目添加到 ObservableCollection 的情况下做到这一点?

4

6 回答 6

41

不,没有办法直接将列表转换为可观察的集合。您必须将每个项目添加到集合中。但是,下面是允许框架枚举值并为您添加它们的快捷方式。

Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
于 2008-10-28T15:36:49.293 回答
19

我迟到了,但如果您需要循环,我想分享这个有趣的片段,用于将列表转换为 ObservableCollection:

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;
}

您可以将集合传递给 ObservableCollection 构造函数:

List<Product> myProds = ......
ObservableCollection<Product> oc = new ObservableCollection<Product>(myProds);

现在你必须将这些翻译成 VB.NET :)

于 2009-08-25T13:29:59.617 回答
3
//Create an observable collection TObservable.

ObservableCollection (TObservable) =new ObservableCollection (TObservable)();

//Convert List items(OldListItems) to collection

OldListItems.ForEach(x => TObservable.Add(x));
于 2011-10-25T13:15:22.327 回答
2

澄清 Junior 在说什么(如果您使用返回 IEnumerable 的 LINQ,请添加一个示例):

//Applications is an Observable Collection of Application in this example
List<Application> filteredApplications = 
      (Applications.Where( i => i.someBooleanDetail )).ToList();
Applications = new ObservableCollection<Application>( filteredApplications );
于 2011-03-04T12:44:39.823 回答
1

即使我迟到了,我想分享一个对Junior答案的快速增强:让开发人员定义用于将可观察集合对象从源集合转换为目标集合的转换器函数。

如下所示:

public static ObservableCollection<TDest> ToObservableCollection<TDest, TSource>(this IEnumerable<TSource> coll, Func<TSource, TDest> converter)
    {
        var c = new ObservableCollection<TDest>();
        foreach (var e in coll)
        {
            c.Add(converter(e));
        }
        return c;
    }
于 2014-01-30T11:28:22.670 回答
0
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);
于 2012-12-25T04:53:36.147 回答