44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using System.Collections.ObjectModel;
|
|
using System.Collections.Specialized;
|
|
using System.ComponentModel;
|
|
|
|
namespace Explorer.Presentation;
|
|
|
|
public sealed class RangeObservableCollection<T> : ObservableCollection<T>
|
|
{
|
|
public void AddRange(IEnumerable<T> items)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(items);
|
|
var list = items as IList<T> ?? 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<T> 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));
|
|
}
|
|
}
|