0
Ich versuche, das verzögerte Laden von Elementen in einem ListView zu implementieren. aber LoadMoreItemsAsync
wird nie aufgerufen.LoadMoreItemsAsync wird nicht aufgerufen
XAML:
<Grid>
<ListView Grid.Row="1" x:Name="MasterListView" ItemsSource="{x:Bind ViewModel.News}">
<!--
<ListView.ItemTemplate>
-->
</ListView>
</Grid>
Ansichtsmodell:
public class HomeViewModel
{
public HomeViewModel()
{
News = new PaginateCollection<NormalNews>(LoadNews);
}
public PaginateCollection<NormalNews> News { get; set; }
public async Task<IEnumerable<NormalNews>> LoadNews(uint size)
{
// ...
}
}
PaginateCollection:
public class PaginateCollection<T> : ObservableCollection<T>, ISupportIncrementalLoading
{
Func<uint, Task<IEnumerable<T>>> load;
public PaginateCollection(Func<uint, Task<IEnumerable<T>>> load)
{
this.load = load;
}
public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)
{
return AsyncInfo.Run(async c =>
{
var data = await load(count);
foreach (var item in data)
{
Add(item);
}
return new LoadMoreItemsResult
{
Count = (uint)data.Count()
};
});
}
public bool HasMoreItems { get; set; }
}
Nicht sicher, aber sollten Sie HasMoreItems nicht auch auf True setzen müssen? Sehen Sie das nicht in Ihrem Code ... cfr das Beispiel von Microsoft gegeben https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.data.isupportincrementalloading – Depechie
Ich setze das HasMoreItems in der Methode 'LoadNews()', aber es heißt nicht, – HeroWong
Selbes Problem, im Konstruktor der PaginateCollection die Eigenschaft HasMoreItems auf true setzen. Dies stellt den ersten Lasttrigger sicher. Oder mit den neuen C# Konventionen bool HasMoreItems {get; einstellen; } = wahr; – Depechie