Подтвердить что ты не робот

Добавить элементы из IList в ObservableCollection

У меня есть ObservableCollection, и я хотел бы установить содержимое IList для этого. Теперь я мог бы просто создать новый экземпляр коллекции..:

public ObservableCollection<Bar> obs = new ObservableCollection<Bar>(); 
public void Foo(IList<Bar> list)
{
    obs = new ObservableCollection<Bar>(list); 
}

Но как я могу взять контент IList и добавить его в мой существующий ObservableCollection? Нужно ли мне перебирать все элементы, или есть лучший способ?

public void Foo(IList<Bar> list)
{
   foreach (var elm in list)
       obs.Add(elm); 
}
4b9b3361

Ответ 1

Вы могли бы сделать

public void Foo(IList<Bar> list)
{
    list.ToList().ForEach(obs.Add);
}

или как метод расширения,

    public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)
    {
        items.ToList().ForEach(collection.Add);
    }    

Ответ 2

Вы можете написать свой собственный метод расширения, если используете С# 3 +, чтобы помочь вам в этом. У этого кода было некоторое базовое тестирование, чтобы убедиться, что он работает:

public static void AddRange<T>(this ObservableCollection<T> coll, IEnumerable<T> items)
{
    foreach (var item in items)
    {
        coll.Add(item);
    }
}

Ответ 3

Цикл - единственный способ, поскольку для ObservableCollection нет эквивалента AddRange.

Ответ 5

Есть библиотека, которая решает эту проблему. Он содержит ObservableList, который может обернуть список. Его можно использовать следующим образом:

List<Bar> currentList = getMyList();
var obvList = new ObservableList<Bar>(currentList);

https://github.com/gsonnenf/Gstc.Collections.ObservableLists