CollectionView无限加载失效:RemainingItemsThresholdReached事件未触发求助
CollectionView增量加载:RemainingItemsThresholdReached事件/命令未触发排查
我尝试为CollectionView实现增量加载功能,但RemainingItemsThresholdReached事件始终未被触发,同时尝试使用RemainingItemsThresholdReachedCommand也没有效果。以下是相关代码:
XAML代码
<CollectionView x:Name="collectionView" ItemsSource="{Binding Users}" VerticalScrollBarVisibility="Always" RemainingItemsThreshold="3" RemainingItemsThresholdReached="LoadMoreAsync" > <CollectionView.ItemTemplate> <DataTemplate > <Border Stroke="White" Background="Black" StrokeThickness="2" Padding="8" Margin="10"> <Border.StrokeShape> <RoundRectangle CornerRadius="10,10,10,10"/> </Border.StrokeShape> <StackLayout > <StackLayout Orientation="Horizontal" Spacing="20" Padding="10"> <Image Source="download.png" HeightRequest="40" WidthRequest="40" /> <Label Text="{Binding UserName}" FontSize="14" FontAttributes="Bold" /> </StackLayout> <BoxView Color="Gray" HeightRequest="2" HorizontalOptions="Fill" /> <Label Padding="7" Text="{Binding Description}"/> <BoxView Color="Gray" HeightRequest="1" HorizontalOptions="Fill" /> <StackLayout Orientation="Horizontal" Spacing="20" Padding="10"> <Grid HorizontalOptions="FillAndExpand"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="30" /> </Grid.RowDefinitions> <ImageButton Grid.Row="0" Grid.Column="0" Source="user.png" HeightRequest="20" WidthRequest="20" /> <ImageButton Grid.Row="0" Grid.Column="1" Source="like.png" HeightRequest="20" WidthRequest="20" /> <ImageButton Grid.Row="0" Grid.Column="2" Source="chat.png" HeightRequest="20" WidthRequest="20" /> </Grid> </StackLayout> </StackLayout> </Border> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView>
后端代码
public void LoadMoreAsync(object sender, EventArgs e) { if (IsBusy) return; IsBusy = true; GetUsers(pageNumber, 6); pageNumber++; IsBusy = false; }
可能的排查与解决方向
- 检查ItemsSource集合类型:确保
Users是ObservableCollection<T>或实现INotifyCollectionChanged的集合。普通List<T>无法让CollectionView感知集合更新,会导致阈值判断失效。 - 验证阈值触发的数量条件:当集合总元素数 ≤
RemainingItemsThreshold时,事件不会触发。比如初始加载6条、阈值设为3,滚动到底部时剩余3条应该触发;如果初始数据不足,或后续加载后总数量仍未超过阈值,事件不会触发。 - 确保CollectionView具备滚动条件:如果CollectionView嵌套在不支持滚动的容器(如未设置
VerticalOptions="FillAndExpand"的StackLayout),或父容器滚动优先级更高,会导致CollectionView无法正确检测滚动位置,进而不触发阈值事件。检查布局结构,保证CollectionView有足够滚动空间。 - 修正IsBusy异步逻辑:当前代码中
IsBusy设为true后立即调用GetUsers,随后马上重置为false。若GetUsers是异步方法,会导致IsBusy在加载完成前就被重置,引发触发异常。应改为异步处理:public async void LoadMoreAsync(object sender, EventArgs e) { if (IsBusy) return; IsBusy = true; await GetUsers(pageNumber, 6); // 假设GetUsers为异步方法 pageNumber++; IsBusy = false; } - 确认ScrollMode未被禁用:检查CollectionView是否设置了
ScrollMode="Disabled",默认ScrollMode="Enabled",禁用滚动会导致滚动相关阈值事件无法触发。 - 测试阈值触发逻辑:手动增加初始数据量(如加载10条),滚动至接近底部观察是否触发;或把
RemainingItemsThreshold设为0,看滚动到底部时是否触发,以此验证阈值逻辑是否正常。
内容的提问来源于stack exchange,提问作者user693570
相关产品推荐
相关产品推荐

