使用xamarin.ios和mmvmcross v3的UICollectionView出现问题

使用xamarin.ios和mmvmcross v3的UICollectionView出现问题,xamarin.ios,uicollectionview,mvvmcross,Xamarin.ios,Uicollectionview,Mvvmcross,我们有一个使用自定义MvxCollectionViewSource作为源的UICollectionView。当选择一个项目时,我们想滚动到第个项目,做一个简短的动画,然后做一个动作。在源代码中,如果为ScrollAnimationEnded设置了事件,则ItemSelected将被覆盖,如下所示 public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath) {

我们有一个使用自定义MvxCollectionViewSource作为源的UICollectionView。当选择一个项目时,我们想滚动到第个项目,做一个简短的动画,然后做一个动作。在源代码中,如果为ScrollAnimationEnded设置了事件,则ItemSelected将被覆盖,如下所示

public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
        {
            var item = GetItemAt(indexPath) as SlideMenuViewItemModel;

            var cell = collectionView.VisibleCells[0];
            var index = collectionView.IndexPathForCell(cell);

            if (!Equals(index, indexPath))
            {
                collectionView.ScrollAnimationEnded += HandleAnimationDone;

                collectionView.ScrollToItem(indexPath, UICollectionViewScrollPosition.CenteredHorizontally, true);   
            }
            else
            {
                var layout = (SlideMenuLayout)collectionView.CollectionViewLayout;
                layout.SelectedIndexPath = indexPath;
                collectionView.PerformBatchUpdates(delegate { }, delegate
                {
                    item.OnClick.Execute(null);
                    layout.SelectedIndexPath = null;

                });

            }
        }

        private void HandleAnimationDone(object sender, EventArgs args)
        {
            CollectionView.ScrollAnimationEnded -= HandleAnimationDone;
            var layout = (SlideMenuLayout)CollectionView.CollectionViewLayout;

            CollectionView.PerformBatchUpdates(delegate { }, delegate
            {
            //    item.OnClick.Execute(null);
                layout.SelectedIndexPath = null;
            });
        }
问题是它只在第一次起作用。选择该项目并执行滚动并触发事件。但是,当尝试进行下一次选择时,不会调用ItemSelected。如果我删除collectionView.ScrollAnimationEnded+=HandleAnimationDone行,它将继续工作。所以连接事件似乎会破坏一些东西,或者我需要调用一些东西进行重置

我希望你有一个建议:)


关于

我还没有找到解决方案,因为设置事件似乎切断了其他事情。但是我做了一个变通,没有使用ScrollToItem和设置动画结束事件,而是做了一个自定义滚动动画。下面展示了我是如何做到这一点的

public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
    {
        var item = GetItemAt(indexPath) as SlideMenuViewItemModel;

        var cell = GetCell (collectionView, indexPath);

        CurrentIndex = indexPath;
        UIView.Animate (0.5, 0, UIViewAnimationOptions.CurveEaseIn,
                        () => {
            // do any animation
        },
        () => {
            //do anything after the animation
        }
        );
    }