我正在使用 C# 中的 WinUI 3,并尝试在 ListView 中启用虚拟化,以便仅显示必要的项目。我想使用 Windows 社区工具包中的 IncrementalLoadingCollection,但遇到了无法找到它的问题。
安装了最新版本的 Windows 社区工具包 NuGet 包。(CommunityToolkit.WinUI.Helpers)但是,当我尝试使用 IncrementalLoadingCollection 时,编译器显示错误,表明无法识别它。
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using CommunityToolkit.Common.Collections;
using CommunityToolkit.WinUI;
using System.Threading.Tasks;
using System.Threading;
using CommunityToolkit.WinUI.Helpers;
public sealed partial class SampleControl : UserControl
{
public SampleControl()
{
this.InitializeComponent();
// Error
var collection = new IncrementalLoadingCollection<SampleDataIncrementalSource, SampleData>();
MyListView.ItemsSource = collection;
}
}
public class SampleData
{
public string data1 { get; set; }
public string data2 { get; set; }
public SampleData( string _data1, string _data2 )
{
this.data1 = _data1;
this.data2 = _data2;
}
}
public class SampleDataIncrementalSource : IIncrementalSource<SampleData>
{
private int _currentPage = 0;
private const int _pageSize = 20;
public async Task<IEnumerable<SampleData>> GetPagedItemsAsync( int pageIndex, int pageSize )
{
await Task.Delay( 0 );
var items = new List<SampleData>();
for( int i = 0; i < pageSize; i++ )
{
items.Add( new SampleData(
$"Data1-{pageIndex * pageSize + i + 1}",
$"Data2-{pageIndex * pageSize + i + 1}" ) );
}
return items;
}
public async Task<IEnumerable<SampleData>> GetPagedItemsAsync( Int32 pageIndex, Int32 pageSize, CancellationToken cancellationToken = default )
{
var items = await GetPagedItemsAsync( _currentPage, _pageSize );
_currentPage++;
return items;
}
}
确保安装了正确的 NuGet 包,在本例中为CommunityToolkit.WinUI.Collections 。您可以在Windows Community Toolkit Gallery应用中检查它。
另外,在项目文件(*.csproj)中,将目标版本编辑为22621。
你可能还需要这个:
您可以在发行说明中找到更多有关此内容的相关信息。