2017-05-30 10 views
1

私は非常に奇妙な問題に直面しています。私はユーザにCollectionViewの横にXamarin.iOSというカテゴリを使用しています。私はMvvMCrossも使用しています。問題は、私がカテゴリCollectionViewをスクロールしてスクロールバックして、いくつかのセルが空であるということです。CollectionViewの空のセル

これは、UIに値をバインドするMvxCollectionViewCellのサブクラスのコードです。

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; 

そして、これは問題のスクリーンショットです:だからとき、私

CategoryCollectionView.DataSource = categorySource; 

:私が最初にこれを変更することで、問題を修正しましたenter image description here

答えて

0

CategoryCollectionView.Source = 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); 

そして、それは魅力のように働いた:)

0

を私のためのソリューションはCellDisplayingEndedメソッドを上書きすることでしたCollectionViewSourceにあります。ここに示すように、https://github.com/MvvmCross/MvvmCross/blob/develop/MvvmCross/Binding/iOS/Views/MvxBaseCollectionViewSource.csには、CellDisplayingEndedメソッドにコメントされたコードがあります。これは、mvvmcrossの一部のバージョンではコメントがなく、dataContextがnullに設定されている可能性があります。

関連する問題