using System.Collections.ObjectModel; using System.Collections.Specialized; using System.ComponentModel; namespace Explorer.Presentation; public sealed class RangeObservableCollection : ObservableCollection { public void AddRange(IEnumerable items) { ArgumentNullException.ThrowIfNull(items); var list = items as IList ?? items.ToList(); if (list.Count == 0) { return; } CheckReentrancy(); foreach (var item in list) { Items.Add(item); } OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count))); OnPropertyChanged(new PropertyChangedEventArgs("Item[]")); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } public void ReplaceAll(IList items) { ArgumentNullException.ThrowIfNull(items); CheckReentrancy(); Items.Clear(); foreach (var item in items) { Items.Add(item); } OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count))); OnPropertyChanged(new PropertyChangedEventArgs("Item[]")); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } }