Есть ли способ сделать это без повторения в List и добавления элементов в ObservableCollection?
Как преобразовать List (Of T) в ObservableCollection (Of T) в VB.NET?
Ответ 1
Нет, нет возможности напрямую преобразовать список в наблюдаемую коллекцию. Вы должны добавить каждый элемент в коллекцию. Однако ниже приведен ярлык, позволяющий структуре перечислить значения и добавить их для вас.
Dim list as new List(of string)
...some stuff to fill the list...
Dim observable as new ObservableCollection(of string)(list)
Ответ 2
Я опаздываю, но хочу поделиться этой интересной частью для преобразования списка в 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
чтобы уточнить, что говорит младший (с добавленным примером, если вы используете 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 );
Ответ 4
//Create an observable collection TObservable.
ObservableCollection (TObservable) =new ObservableCollection (TObservable)();
//Convert List items(OldListItems) to collection
OldListItems.ForEach(x => TObservable.Add(x));
Ответ 5
Несмотря на то, что я опаздываю, я хочу поделиться быстрым улучшением с ответом 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;
}
Ответ 6
ObservableCollection<yourobjectname> result = new ObservableCollection<yourobjectname>(yourobjectlist);