Есть ли способ определить, была ли прокрутка CollectionView инициирована пользователем или ScrollTo? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть страница, на которой размещены CollectionView и Map. есть список элементов, ItemsSource из CollectionView установлен в этот список, и выводы карты нарисованы на основе этого списка, существует требование, что когда пользователь прокручивает CollectionView, подсвечивается противоположный вывод карты и при нажатии на булавку CollectionView прокручивается до этого элемента.

Я использую ScrollTo и Scrolled событие. но проблема в том, что при вызове ScrollTo событие Scrolled также запускается, и это вызывает задержку или некоторое неожиданное поведение. Я попытался установить флаг:

private int centerIndex = -1;
bool userScroll;

private void CollectionView_Scrolled(object sender, ItemsViewScrolledEventArgs args)
{
    if (centerIndex != args.CenterItemIndex)
    {
        if (userScroll)
            MessagingCenter.Send<object, int>(this, Keys.GoToLocation, args.CenterItemIndex);
        userScroll = true;
        centerIndex = args.CenterItemIndex;
    }
}


private void ScrollToVehicle(object arg1, Item item)
{

    if (collectionView.ItemsSource != null && collectionView.ItemsSource.Cast<Item>().Contains(item))
    {
        userScroll = false;
        collectionView.ScrollTo(item, position: ScrollToPosition.Center, animate: false);
    }
}

, но проблема в том, что Scrolled событие вызывается несколько раз (внутри оператора if)

1 Ответ

0 голосов
/ 02 марта 2020

Попробуйте отписаться от CollectionView_Scrolled перед вызовом ScrollTo

collection.Scrolled -= CollectionView_Scrolled;
...