Если вы собираетесь добавлять много элементов, рассмотрите возможность получения своего собственного класса из ObservableCollection и добавления элементов в защищенный элемент Items - это не вызовет события в наблюдателях.Когда вы закончите, вы можете вызвать соответствующие события:
public class BulkUpdateObservableCollection<T> : ObservableCollection<T>
{
public void AddRange(IEnumerable<T> collection)
{
foreach (var i in collection) Items.Add(i);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
OnPropertyChanged(new PropertyChangedEventArgs("Count"));
}
}
При добавлении многих элементов в ObservableCollection, которая уже связана с элементом пользовательского интерфейса (например, LongListSelector), это может существенно повлиять на производительность.
Перед добавлением элементов вы также можете убедиться, что у вас достаточно места, чтобы список не расширялся непрерывно, реализовав этот метод в классе BulkObservableCollection и вызвав его до вызова AddRange:
public void IncreaseCapacity(int increment)
{
var itemsList = (List<T>)Items;
var total = itemsList.Count + increment;
if (itemsList.Capacity < total)
{
itemsList.Capacity = total;
}
}