У меня есть страница, на которой размещены 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
)