Observable collection с уведомлением при добавлении диапазона значений
В .NET есть такой перечислимый тип как ObservableCollection. Его особенность в том, что эта коллекция при изменении её элементов (добавлении или удалении), уведомляет наблюдающие за ней классы об этом изменении. Это бывает полезно, например, когда к данной коллекции привязаны элементы пользовательского интерфейса. Но если необходимо добавить в коллекцию сразу множество элементов, то добавление каждого элемента будет уведомлять об изменении коллекции каждый раз. Это вызовет избыточную нагрузку на пользовательский интерфейс, и он может даже зависнуть на какое-то время. Чтобы этого избежать, можно написать свой собственный класс, который будет наследовать от ObservableCollection и содержать метод добавления множества элементов за один раз, а уведомлять об этом единожды. Вот как например это можно сделать:
Imports System.Collections.Specialized ''' <summary> ''' ObservableCollection с поддержой добавления множества элементов. ''' </summary> Public Class ObservableRangeCollection(Of T) Inherits ObjectModel.ObservableCollection(Of T) #Region "CTORs" Public Sub New() MyBase.New() End Sub Public Sub New(collection As IEnumerable(Of T)) MyBase.New(collection) End Sub #End Region '/CTORs #Region "METHODS" ''' <summary> ''' Добавляет в коллекцию несколько элементов и в конце уведомляет об этом. ''' </summary> Public Sub AddRange(collection As IEnumerable(Of T)) For Each item As T In collection Items.Add(item) Next OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, collection)) End Sub #End Region '/METHODS End Class
По аналогии с методом AddRange можно добавить методы для удаления, вставки или перемещения набора элементов коллекции.