Класс
NET Framework ObservableCollection
отправляет отдельные уведомления при каждом добавлении элемента в коллекцию и не предоставляет механизма для функций типа AddRange. Однако вы можете очень легко создать свою собственную коллекцию, которая реализует INotifyCollectionChanged
и отправлять любые уведомления, которые вам нравятся.
С проблемой, с которой вы можете столкнуться, является то, что интерфейс INotifyCollectionChanged
включает возможность указать, что несколько элементов были добавлены в коллекцию в одном сообщении, но никакие стандартные классы NET Framework фактически не создают эти уведомления. По этой причине некоторые сторонние элементы управления и элементы управления с открытым исходным кодом, которые предполагают, что только один элемент был добавлен при получении уведомления о добавлении. Даже встроенные классы NET Framework могут иметь необнаруженные ошибки, связанные с этим.
По этим причинам я бы порекомендовал вашей пользовательской коллекции иметь режим, в котором можно настроить постоянную отправку уведомления о сбросе в конце AddRange
вместо одного многоэлементного уведомления о добавлении. Вы можете оптимизировать этот процесс, отправив несколько уведомлений о добавлении одного элемента или уведомление о сбросе в зависимости от фактического количества добавленных элементов.
Конечно, есть ситуации, в которых столь же легко заменить ObservableCollection
на новый. Иногда это будет намного менее эффективно, чем цикл Add (), потому что обработчики событий и CollectionViews перестраиваются. В других случаях это будет более эффективно, если коллекция велика, и ваш цикл добавляет только несколько элементов за раз.
А иногда это вообще не работает.