我已经实现了ISupportIncrementalLoading,以便在用户滚动时加载列表中的大量项目。当我加载视图时,它是空的,它只会加载更多的数据,直到我滚动列表。
这是实现它的类
public class DeviceListDataSource<T> : ObservableCollection<T>, ISupportIncrementalLoading
where T : class
{
public int LastItem = 0;
public bool HasMoreItems => hasMoreItems;
private int currentPage;
private List<T> source;
private bool hasMoreItems;
public DeviceListDataSource(List<T> source)
{
this.source = source;
hasMoreItems = true;
}
public async Task<IEnumerable<T>> GetPagedItems(int pageIndex, int pageSize)
{
return await Task.Run(() =>
{
var result = (from p in source
select p).Skip(pageIndex * pageSize).Take(pageSize);
return result;
});
}
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
{
var dispatcher = Window.Current.Dispatcher;
return Task.Run(
async () =>
{
var result = await GetPagedItems(currentPage++, (int) count);
if (result == null || result.Count() == 0)
{
hasMoreItems = false;
}
else
{
await dispatcher.RunAsync(
CoreDispatcherPriority.Normal,
() =>
{
foreach (T item in result)
{
Add(item);
}
});
}
return new LoadMoreItemsResult() { Count = (uint)currentPage };
}).AsAsyncOperation();
}
}
}
在视图模型中,我将其分配给绑定到xaml视图中列表视图的变量:Items = new DeviceListDataSource<DataObject>(source);
有没有办法加载列表中的前X项?它在第一次加载时始终为0,并且在我滚动之前一直保持这种状态。非常感谢!
答案 0 :(得分:1)
有没有办法加载列表中的前X项?
您已经在LoadMoreItemsAsync
类中实现了DeviceListDataSource
方法,只需调用此方法即可在初始加载时手动加载X项代码。例如:
DeviceListDataSource<Data> Items = new DeviceListDataSource<Data>(source);
Items.LoadMoreItemsAsync(10);