CollectionView сохраняет поведение scrollOffset для конца списка

#xamarin.forms #uicollectionview

#xamarin.forms #uicollectionview

Вопрос:

Я использую Xamarin.Forms v4.8.0.1534 и у меня есть список элементов, отображаемых a CollectionView . У меня есть новые элементы, поступающие через случайные промежутки времени, и пользователь, возможно, прокрутил список, чтобы просмотреть любой исторический элемент. Список должен работать в двух режимах:

  • Мониторинг: где новые элементы должны отображаться сразу при добавлении.
  • Проверка: где пользователь будет просматривать исторические элементы в списке.

Если в списке отображается последний элемент, добавленный при добавлении нового элемента (режим мониторинга), тогда список должен прокручиваться, чтобы показать новый элемент полностью. если пользователь прокрутил список, чтобы просмотреть исторические элементы, то список не должен перемещаться при добавлении новых элементов.

Это возможность добавлять новые элементы в начало списка или в низ.

Если опция настроена на добавление элементов в начало списка, и ItemsUpdatingScrollMode = KeepScrollOffset тогда все работает так, как требуется.

Однако, похоже, не существует эквивалентной настройки для добавления элементов в нижней части списка.

Я пробовал разные настройки ItemsUpdatingScrollMode , но ничего не работает так, как требуется, и я также искал способы проверить, виден ли последний добавленный элемент CollectionView перед добавлением нового. Тогда идея состояла бы в том, чтобы использовать ScrollTo , если это уместно, но я не могу найти никакого способа проверить CollectionView видимость элемента.

Я не уверен, что я упускаю что-то очевидное, но любая помощь будет оценена, особенно в отношении способов проверки CollectionView видимости элемента.

Ответ №1:

Я не могу найти способ проверить видимость элемента CollectionView.

Существует LastVisibleItemIndex, который может проверять, виден ли элемент, вы можете обратиться к этому документу:

 void OnCollectionViewScrolled(object sender, ItemsViewScrolledEventArgs e)
{
    Debug.WriteLine("LastVisibleItemIndex: "   e.LastVisibleItemIndex);
}
  

Код Xaml:

 <CollectionView Scrolled="OnCollectionViewScrolled">
    ...
</CollectionView>