我面临一个非常奇怪的问题,我正在使用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;
答案 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。