VirtualizingObservableCollection 1.2.0

Install-Package VirtualizingObservableCollection -Version 1.2.0
dotnet add package VirtualizingObservableCollection --version 1.2.0
<PackageReference Include="VirtualizingObservableCollection" Version="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add VirtualizingObservableCollection --version 1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: VirtualizingObservableCollection, 1.2.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install VirtualizingObservableCollection as a Cake Addin
#addin nuget:?package=VirtualizingObservableCollection&version=1.2.0

// Install VirtualizingObservableCollection as a Cake Tool
#tool nuget:?package=VirtualizingObservableCollection&version=1.2.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.


GitHub is here:

There are no performant large data set observable collections that support write operations in .NET, so we wrote the VirtualizingObservableCollection, which does the following:
◾Implements the same interfaces as ObsevableCollection<T> so you can use it anywhere you’d use an ObsevableCollection<T> – no need to change any of your existing controls.
◾Supports true multi-user read/write without resets (maximizing performance for large-scale concurrency scenarios).
◾Manages memory on its own so it never runs out of memory, no matter how large the data set is (especially important for mobile devices).
◾Natively works asynchronously – great for slow network connections and occasionally-connected models.
◾Works great out of the box, but is flexible and extendable enough to customize for your needs.
◾Has a data access performance curve nearly as good as the regular ObsevableCollection – the cost of using it is negligible.
◾Works in any .NET project because it’s implemented in a Portable Code Library (PCL).

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on VirtualizingObservableCollection:

Package Downloads

Binding converters, markup extensions and various helpers for WPF, UWP (cross platform thank to Uno Platform).

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.0 17,726 3/31/2015
1.1.3 829 3/11/2015
1.0.2 1,166 2/25/2015
1.0.1 1,138 2/24/2015
0.9.3 1,004 2/20/2015
0.9.1 918 2/17/2015
0.9.0 740 2/6/2015


Fixed some timing bugs.
Made IndexOf async for a async provider.
Tweaked ResetAsync in the VOC. If you want to do Async resets (typically used for filters). This is the best method. Clear() actually will run sync rather than async.

Added a couple of interfaces you can put on a provider to make it more flexable:

IProviderPreReset - Adds a OnBeforeReset - aka a good place to clear stuff down.

IAsyncResetProvder - This will allow you to get the count of the reset async rather than sync for the Clear(). I would suggest you use ResetAsync() instead.


Can now support the insert and remove of millions of rows without effecting performance (yes - this is a real use case we needed).

Added ResetAsync which causes it to get it all again. This is great for filters.

Fixed broken count on non-async version.

Added base paged source, including MakeASync and MakeSync versions.

Fixed count bug when Async and the count returns instantly.

Fixed all Async to Sync context bugs (wrapped all .Results in Task.Run).

Greatly optimized if you do a lot of Inserts or Removes at the head of the VOC.

Implemented BulkMode:-

  : do lots of add/insert/removes
} // Now does a reset.

Rewrote the core page/offset getter - works much better with large updates now.

Added AddRange.

Fixed a couple of ASync bugs related to cancelation.

Implemented Clear - so it does a reset/get count.
Minor change to Async GetPlaceHold to pass in the index

Re-worked the Add/Append implementation to create new pages..

Async seems stable now: Implement IPagedSourceProviderAsync<T> and pass that to the PagingManager constructor.

Changed rest of the DateTimes to Object so you can implement any type of IPageExpiryComparer you want.