Как преобразовать список (Of T) в ObservableCollection (Of T) в VB.NET? - PullRequest
20 голосов
/ 28 октября 2008

Есть ли способ сделать это без перебора списка и добавления элементов в коллекцию ObservableCollection?

Ответы [ 6 ]

39 голосов
/ 28 октября 2008

Нет, невозможно напрямую преобразовать список в наблюдаемую коллекцию. Вы должны добавить каждый элемент в коллекцию. Однако ниже приведен ярлык, позволяющий платформе перечислять значения и добавлять их для вас.

Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
18 голосов
/ 25 августа 2009

Я опоздал, но я хочу поделиться этой интересной частью для преобразования списка в 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:)

3 голосов
/ 25 октября 2011
//Create an observable collection TObservable.

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

//Convert List items(OldListItems) to collection

OldListItems.ForEach(x => TObservable.Add(x));
2 голосов
/ 04 марта 2011

, чтобы уточнить, что говорит Junior (с дополнительным примером, если вы используете LINQ, который возвращает IEnumerable):

//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 голос
/ 30 января 2014

Несмотря на то, что я опоздал, я хочу поделиться быстрым улучшением ответа 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 голосов
/ 25 декабря 2012
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...