Skip to content
This repository was archived by the owner on Feb 13, 2025. It is now read-only.

Repository files navigation

WpfObservableRangeCollection

NuGetTarget frameworkTarget frameworkGitHub issuesGitHub starsGitHub licenseCodeFactor

Provides ObservableRangeCollection and its WPF version, including AddRange, InsertRange, RemoveRange/RemoveAll, Replace/ReplaceRange methods for bulk operation to avoid frequent update notification events.

NuGet Package Manager

PM> Install-Package WpfObservableRangeCollection

.NET CLI

dotnet add package WpfObservableRangeCollection

Classes

Usage

varcollection=newWpfObservableRangeCollection<int>();collection.AddRange(Enumerable.Range(0,10));

{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }


collection.RemoveRange(index:5,count:3);

{ 0, 1, 2, 3, 4, 5, 6, 7 8, 9 }


// You can also receive the return value to get the number of items that were successfully removed.// removed here is 2.intremoved=collection.RemoveRange(new[]{1,3,5});

{ 0, 1 2, 3 4, 8, 9 }


collection.InsertRange(index:2,collection:Enumerable.Range(10,7));

{ 0, 2, 10, 11, 12, 13, 14, 15, 16, 4, 8, 9 }


// This method is roughly equivalent to RemoveRange, then InsertRange.// When index and count are equal to 0, it is equivalent to InsertRange(0, collection).// changed here is 0.intchanged=collection.ReplaceRange(index:6,count:3,new[]{-1,-2,-3});

{ 0, 2, 10, 11, 12, 13, -1, -2, -3, 4, 8, 9 }


// Clears the current collection and replaces it with the specified item.collection.Replace(42);

{ 42 }


  • If duplicate items are not allowed in the collection, set AllowDuplicates = false, and you can specify the Comparer = xxx.
  • Most of the extended methods have return values to indicate changes in the number of collections.

Why WpfObservableRangeCollection?

See ObservableCollection Doesn't support AddRange method, so I get notified for each item added, besides what about INotifyCollectionChanging? - StackOverflow

I've searched the web for some ObservableCollections that have *Range methods, but they all raise various exceptions(and some strange problems) in certain specific situations:

  • System.NotSupportedException: Range actions are not supported.
  • System.InvalidOperationException: The "x" index in the collection change event is not valid for collections of size "y".
  • More? I'm not sure. I forgot.

In the end, I chose weitzhandler/RangeObservableCollection and weitzhandler/WpfObservableRangeCollection and made slight changes to the code, and finally, I didn't encounter any problems, for now.

If the NotSupportedException still occurred, try using BindingOperations.EnableCollectionSynchronization(IEnumerable, Object).

Seealso

About

Provides ObservableRangeCollection and its WPF version, including AddRange, InsertRange, RemoveRange/RemoveAll, Replace/ReplaceRange methods for bulk operation to avoid frequent update notification events.

Topics

Resources

Stars

8 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages