MPowerKit.VirtualizeListView 1.1.0

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package MPowerKit.VirtualizeListView --version 1.1.0                
NuGet\Install-Package MPowerKit.VirtualizeListView -Version 1.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MPowerKit.VirtualizeListView" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MPowerKit.VirtualizeListView --version 1.1.0                
#r "nuget: MPowerKit.VirtualizeListView, 1.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MPowerKit.VirtualizeListView as a Cake Addin
#addin nuget:?package=MPowerKit.VirtualizeListView&version=1.1.0

// Install MPowerKit.VirtualizeListView as a Cake Tool
#tool nuget:?package=MPowerKit.VirtualizeListView&version=1.1.0                

MPowerKit.VirtualizeListView

MAUI Virtualize ListView with smooth scrolling and without platform-specific code

Nuget

It's not a secret to anybody, that ListView and CollectionView in MAUI have bad scrolling performance. This project started as an experimantal project to find a way to make a virtualize listview using ScrollView and AbsoluteLayout only. Suprisingly, the scrolling performance is way better, than was expected. So you can check it right now.

It works on all platforms MAUI supports and it has the same behavior on all platforms, because it does not have platform-specific code.

So, under the hood it is a ScrollView with AbsoluteLayout as items layout. The main idea of virtualization for this listview is to change Translation of items while keeping them attached to the AbsoluteLayout. ItemsLayout is responsible for virtualization process and for creating / removing views and it will not create more views as necessary.

Your PRs are welcome!

Android Windows
<video src="https://github.com/MPowerKit/VirtualizeListView/assets/23138430/edd8aa08-3a6a-404f-9e95-28343b13498f" controls="controls" width="287" height="630"/> <video src="https://github.com/MPowerKit/VirtualizeListView/assets/23138430/e9b6715a-7f56-4f23-b757-9c18c6597fad" controls="controls" width="426" height="240"/>

Implemented features:

  • Linear items layout
  • Grid items layout
  • Items spacing
  • Virtualization
  • Grouping
  • Collection padding
  • Scroll orientation (collection orientation)
  • Disable scrolling
  • Header / Footer
  • Load more
  • Item tap handling
  • Item resize handling
  • Add, Remove, Replace, Move, Reset operations on collection
  • Drag and drop (reordering)
  • Sticky headers
  • Animated add/remove/move operations

Usage

Add UseMPowerKitListView() to your MauiProgram.cs file as next

builder
    .UseMauiApp<App>()
    .UseMPowerKitListView();

and in your xaml just use as a regular CollectionView.

Note: The root of the ItemTemplate has to be typeof(VirtualizeListViewCell), but group/header/footer templates are not allowed to have root of this type.

To change items spacing you need to reset the ItemsLayout property as next:

<mpowerkit:VirtualizeListView>
	<mpowerkit:VirtualizeListView.ItemsLayout>
		<mpowerkit:LinearLayout ItemSpacing="15" />
	</mpowerkit:VirtualizeListView.ItemsLayout>
</mpowerkit:VirtualizeListView>

By default it has zero spacing.

To change collection orientation just change the Orientation property of the VirtualizeListView as you would do this in ScrollView.

To disable scroll set CanScroll property to false, and do not change Orientation property to Neither.

Other useful features

FixedRefreshView

This package brings to you fixed MAUI's RefreshView as FixedRefreshView. Here, you can disable refreshing without disabling entire collection. For this you may use IsPullToRefreshEnabled.

ObservableRangeCollection

Also, this package contains ObservableRangeCollection which is a ObservableCollection, but it has a bunch of useful methods to manipulate the collection with batch updates. Recommended to use with VirtualizeListView. It provides few methods: AddRange, InsertRange, RemoveRange, ReplaceRange.

Known issues

  • In debug mode it can have bad scrolling performance, especially on Windows, but in release mode it works surprisingly very well.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-android34.0 is compatible.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-ios17.2 is compatible.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.2.1 77 11/6/2024
2.2.0 128 11/1/2024
2.1.1 76 11/1/2024
2.1.0 101 10/28/2024
2.0.4 77 10/28/2024
2.0.3 200 10/14/2024
2.0.2 211 9/30/2024
2.0.1 764 9/1/2024
2.0.0 149 8/27/2024
2.0.0-pre4 125 8/21/2024
2.0.0-pre3 122 8/21/2024
2.0.0-pre2 100 8/20/2024
1.2.5 175 8/15/2024
1.2.4 2,195 7/26/2024
1.2.3 83 7/26/2024
1.2.2 72 7/26/2024
1.2.0 97 7/23/2024
1.1.5 104 7/8/2024
1.1.4 115 7/3/2024
1.1.3 118 7/1/2024
1.1.2 89 6/26/2024
1.1.1 867 6/4/2024
1.1.0 104 5/31/2024
1.0.5 459 5/23/2024
1.0.4 105 5/21/2024
1.0.3 106 5/21/2024
1.0.2 351 5/13/2024
1.0.1 91 5/12/2024
1.0.0 103 5/11/2024