有没有办法检测用户或ScrollTo是否已启动CollectionView滚动?

时间:2020-02-27 13:06:01

标签: xamarin.forms collectionview

我有一个页面,其中托管一个CollectionViewMap。 有一个项目列表,ItemsSource中的CollectionView设置为此列表,并且根据此列表绘制地图图钉,因此要求用户滚动CollectionView相对的地图图钉会突出显示,单击图钉时,CollectionView会滚动到该项目。

我使用ScrollToScrolled事件。但是问题在于,当调用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 :(得分:0)

在调用ScrollTo之前尝试取消订阅CollectionView_Scrolled

collection.Scrolled -= CollectionView_Scrolled;