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

Commit 1e9b50d

Browse files
Update README.md
1 parent 812002d commit 1e9b50d

File tree

1 file changed

+70
-5
lines changed

1 file changed

+70
-5
lines changed

README.md

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,89 @@
11
# WpfObservableRangeCollection
22

3+
[![NuGet](https://buildstats.info/nuget/WpfObservableRangeCollection?includePreReleases=true)](https://www.nuget.org/packages/WpfObservableRangeCollection/)
4+
[![Target framework](https://img.shields.io/badge/support-.NET_6.0--Windows-blue)](https://github.com/CodingOctocat/WpfObservableRangeCollection)
5+
[![GitHub issues](https://img.shields.io/github/issues/CodingOctocat/WpfObservableRangeCollection)](https://github.com/CodingOctocat/WpfObservableRangeCollection/issues)
6+
[![GitHub stars](https://img.shields.io/github/stars/CodingOctocat/WpfObservableRangeCollection)](https://github.com/CodingOctocat/WpfObservableRangeCollection/stargazers)
7+
[![GitHub license](https://img.shields.io/github/license/CodingOctocat/WpfObservableRangeCollection)](https://github.com/CodingOctocat/WpfObservableRangeCollection/blob/master/LICENSE)
8+
[![CodeFactor](https://www.codefactor.io/repository/github/codingoctocat/wpfobservablerangecollection/badge)](https://www.codefactor.io/repository/github/codingoctocat/wpfobservablerangecollection)
9+
310
Provides ObservableRangeCollection and its WPF version, including AddRange, InsertRange, RemoveRange/RemoveAll, Replace/ReplaceRange methods for bulk operation to avoid frequent update notification events.
411

5-
---
12+
## NuGet Package Manager
613

7-
[![NuGet](https://buildstats.info/nuget/WpfObservableRangeCollection?includePreReleases=true)](https://www.nuget.org/packages/WpfObservableRangeCollection/)
14+
PM> Install-Package WpfObservableRangeCollection
15+
16+
## .NET CLI
17+
18+
dotnet add package WpfObservableRangeCollection
819

920
---
1021

1122
## Classes
12-
- `ObservableRangeCollection`: Represents a dynamic data collection that provides notifications when items get added, removed, or when the whole list is refreshed.
23+
- `ObservableRangeCollection`: An ObservableCollection that supports bulk operations to avoid frequent update notification events.
1324
> Forked from [weitzhandler/rangeobservablecollection-cs](https://gist.github.com/weitzhandler/65ac9113e31d12e697cb58cd92601091#file-rangeobservablecollection-cs)
1425
15-
- `WpfObservableRangeCollection`: Wpf version of ObservableRangeCollection with CollectionView support.
26+
- `WpfObservableRangeCollection`: WPF version of ObservableRangeCollection with CollectionView support.
1627
> Forked from [weitzhandler/wpfobservablerangecollection-cs](https://gist.github.com/weitzhandler/65ac9113e31d12e697cb58cd92601091#file-wpfobservablerangecollection-cs)
1728
29+
# Usage
30+
31+
```csharp
32+
var collection = new WpfObservableRangeCollection<int>();
33+
collection.AddRange(Enumerable.Range(0,10));
34+
```
35+
> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
36+
37+
</br>
38+
39+
```csharp
40+
collection.RemoveRange(index: 5, count: 3);
41+
```
42+
> { 0, 1, 2, 3, 4, ~~5, 6, 7~~ 8, 9 }
43+
44+
</br>
45+
46+
```csharp
47+
// You can also receive the return value to get the number of items that were successfully removed.
48+
// removed here is 2.
49+
int removed = collection.RemoveRange(new[] { 1, 3, 5 });
50+
```
51+
> { 0, ~~1~~ 2, ~~3~~ 4, 8, 9 }
52+
53+
</br>
54+
55+
```csharp
56+
collection.InsertRange(index: 2, collection: Enumerable.Range(10, 7));
57+
```
58+
> { 0, 2, 10, 11, 12, 13, 14, 15, 16, 4, 8, 9 }
59+
60+
</br>
61+
62+
```csharp
63+
// This method is roughly equivalent to RemoveRange, then InsertRange.
64+
// When index and count are equal to 0, it is equivalent to InsertRange(0, collection).
65+
// changed here is 0.
66+
int changed = collection.ReplaceRange(index: 6, count: 3, new[] { -1, -2, -3 });
67+
```
68+
> { 0, 2, 10, 11, 12, 13, -1, -2, -3, 4, 8, 9 }
69+
70+
</br>
71+
72+
```csharp
73+
// Clears the current collection and replaces it with the specified item.
74+
collection.Replace(42);
75+
```
76+
> { 42 }
77+
78+
</br>
79+
80+
- If duplicate items are not allowed in the collection, set `AllowDuplicates = false`, and you can specify the `Comparer = xxx`.
81+
- Most of the extended methods have return values to indicate changes in the number of collections.
82+
1883
## Why WpfObservableRangeCollection?
1984
See [ObservableCollection Doesn't support AddRange method, so I get notified for each item added, besides what about INotifyCollectionChanging? - StackOverflow](https://stackoverflow.com/q/670577/4380178)
2085

21-
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:
86+
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:
2287
- System.NotSupportedException: Range actions are not supported.
2388
- System.InvalidOperationException: The "x" index in the collection change event is not valid for collections of size "y".
2489
- More? I'm not sure. I forgot.

0 commit comments

Comments
 (0)