我有一个带有 CollectionView 的页面并且工作正常,但目前,我正在尝试实现 RemainingItemsThresholdReachedCommand 但没有成功。问题是,即使不滚动集合,该命令也会持续触发,而且,启用该命令时,集合的滚动会变得非常滞后。
集合位于 Grid 内,而 Grid 位于 Scrollview 内,如下所示:
<Scrollview>
<Grid>
<CollectionView>
</CollectionView>
</Grid>
</Scrollview>
这是我的代码。
XAML
<CollectionView Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" ItemsSource="{Binding Messages}" SelectionMode="None" BackgroundColor="{AppThemeBinding Dark=Black,Light=White}" RemainingItemsThreshold="0" RemainingItemsThresholdReachedCommand="{Binding RemainingItemsCommand}">
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="models:MessagesMessages">
</DataTemplate>
</CollectionView.ItemTemplate>
视图模型
public partial class MessagesPageViewModel : ObservableObject
{
public ObservableCollection<MessagesMessages> Messages { get; set; } = new();
[RelayCommand]
private void RemainingItems()
{
LoadMessages();
}
public MessagesPageViewModel(IApiService apiService)
{
apiService = apiService;
LoadMessages();
}
private async void LoadMessages()
{
Messages.Add(...)
}
}
我尝试将 RemainingItemsThreshold 值更改为每个数字,但它无法按预期工作。我正在从 API 中以 10 条消息的包形式检索数据,第一次加载填满整个屏幕,但如果不滚动,命令会继续触发。
不建议将垂直滚动的 CollectionView 包装在垂直滚动的 ScrollView 中。 CollectionViews 有自己的内置滚动功能,因此您不必将其放入 ScrollView 中。否则,会导致很多滚动问题。如果你还想把它放在滚动视图中,尝试设置CollectionView的HeightRequest。
更多信息可以参考:CollectionView需要ScrollView #8097,如何在 ScrollView 中使用 CollectionView。
微软, 您找到解决方案了吗?因为我现在也面临着同样的问题!