我有一个页面,其中托管一个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
语句内部)
答案 0 :(得分:0)
在调用ScrollTo之前尝试取消订阅CollectionView_Scrolled
collection.Scrolled -= CollectionView_Scrolled;