CollectionView

时间:2017-05-30 16:21:11

标签: xamarin xamarin.ios mvvmcross

我面临一个非常奇怪的问题,我正在使用CollectionView中的横向Xamarin.iOS向用户显示类别,我也使用MvvMCross。问题是当我滚动类别CollectionView并向后滚动时,一些单元格是空的。

这是MvxCollectionViewCell子类的代码,我将UI绑定到UI。

public partial class DealListCategoryCollectionCellView : MvxCollectionViewCell
    {
        public static readonly UINib Nib = UINib.FromName("DealListCategoryCollectionCellView", NSBundle.MainBundle);
        public static readonly NSString Key = new NSString("CategoryCollectionViewCell");
        private FXMvxImageViewLoader _imageLoader;

        public DealListCategoryCollectionCellView(IntPtr handle) : base(handle)
        {
            _imageLoader = new FXMvxImageViewLoader(() => CategoryImageView);
            this.DelayBind(() =>
            {

                var set = this.CreateBindingSet<DealListCategoryCollectionCellView, CategoryCellViewModel>();
                set.Bind(TitleLabel).To(vm => vm.Name);
                set.Bind(_imageLoader).To(vm => vm.Slug).WithConversion("LocalImage", "icons");
                set.Apply();

            });
        }

        public static DealListCategoryCollectionCellView Create()
        {
            return (DealListCategoryCollectionCellView)Nib.Instantiate(null, null)[0];
        }
    }

这就是我如何绑定上面的collectionview Cell。

 CategoryCollectionView.RegisterNibForCell(DealListCategoryCollectionCellView.Nib, DealListCategoryCollectionCellView.Key);
var categorySource = new MvxCollectionViewSource(CategoryCollectionView,DealListCategoryCollectionCellView.Key);

CategoryCollectionView.Source = categorySource;

这是问题的屏幕截图:enter image description here

2 个答案:

答案 0 :(得分:0)

我先修改了这个问题:

CategoryCollectionView.Source = categorySource;

为:

CategoryCollectionView.DataSource = categorySource;

因此,当我从Source更改为DataSource时,空单元格问题已得到修复,但还有另一个问题是我的单元格未被触发。所以我实现了这样的CollectionViewDelegate

class CategoryCollectionDelegate : UICollectionViewDelegate
    {
        DealListViewModel viewModel;
        public CategoryCollectionDelegate(DealListViewModel vm)
        {
            viewModel = vm;
        }
        public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
        {
            Category currentCategory = viewModel.Categories[indexPath.Row];
            Console.WriteLine(currentCategory.Name);
            viewModel.DoSelectCategoryCommand(currentCategory);
        }
    }

而且比我那样使用它:

CategoryCollectionView.Delegate = new CategoryCollectionDelegate(DealListViewModel);

它有点像魅力:)

答案 1 :(得分:0)

我的解决方案是覆盖CollectionViewSource中的CellDisplayingEnded方法。正如您在此处看到的https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Binding/iOS/Views/MvxBaseCollectionViewSource.cs,CellDisplayingEnded方法中有一些注释代码,可能在某些版本的mvvmcross中没有注释,dataContext也设置为null。