如何在VB.NET中将List(Of T)转换为ObservableCollection(Of T)?

21

有没有一种方法可以在不迭代列表并将项目添加到ObservableCollection的情况下完成此操作?


请参考相关问题:https://dev59.com/kXRB5IYBdhLWcg3wETxJ - gideon
6个回答

42

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

Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)

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 :)


那是C#而不是VB.NET,但无论如何+1,因为它解决了任何IEnumerable的问题(还有因为你晚了!) - MarkJ
好笑!这真是微妙的幽默!! - RredCat

3
//Create an observable collection TObservable.

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

//Convert List items(OldListItems) to collection

OldListItems.ForEach(x => TObservable.Add(x));

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

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

0
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);

请在此处放置您的答案的描述。 - Bhavesh Patadiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接