Xamarin.forms 有没有办法检测CollectionView滚动是由用户启动还是由ScrollTo启动的?

Xamarin.forms 有没有办法检测CollectionView滚动是由用户启动还是由ScrollTo启动的?,xamarin.forms,collectionview,Xamarin.forms,Collectionview,我有一个页面,上面有一个CollectionView和Map。 有一个项目列表,CollectionView的ItemsSource被设置为该列表,并根据该列表绘制地图插脚,用户滚动CollectionView时,需要突出显示相对的地图插脚,当点击pin时,CollectionView将滚动到该项目 我使用ScrollTo和Scrolled事件。但问题是,当调用ScrollTo时,也会触发Scrolled事件,这会导致延迟或一些意外行为。 我试图设置一个标志: private int cente

我有一个页面,上面有一个
CollectionView
Map
。 有一个项目列表,
CollectionView
ItemsSource
被设置为该列表,并根据该列表绘制地图插脚,用户滚动
CollectionView
时,需要突出显示相对的地图插脚,当点击pin时,
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);
    }
}
private int centerIndex=-1;
bool用户滚动;
私有void CollectionView_已滚动(对象发送方,ItemsViewScrolledEventArgs args)
{
如果(centerIndex!=args.CenterItemIndex)
{
如果(用户滚动)
Send(this,Keys.GoToLocation,args.CenterItemIndex);
userScroll=true;
centerIndex=args.CenterItemIndex;
}
}
私人车辆(对象arg1,项目)
{
if(collectionView.ItemsSource!=null&&collectionView.ItemsSource.Cast().Contains(项目))
{
userScroll=false;
collectionView.ScrollTo(项目,位置:ScrollToPosition.Center,动画:false);
}
}

但问题是,
Scrolled
事件被多次调用(在
if
语句中)

尝试从调用ScrollTo之前滚动的CollectionView中取消订阅

collection.Scrolled -= CollectionView_Scrolled;

我猜你想在滚动到特殊位置时突出显示,你可以使用
ScrollTo
方法而不是
Scrolled
@WendyZang MSFT我需要同时使用这两种方法。当请求
ScrollTo
时,我不想触发
Scrolled
事件