MvxCollectionViewCell蓝调

时间:2014-11-28 09:42:49

标签: ios xamarin.ios xamarin mvvmcross

我从UICollectionView继承了MvxViewController。它包含继承自MvxCollectionViewCell的单元格。数据通过UICollectionView中的 CreateBindingSet()绑定到源,我使用 DelayBind()将数据绑定到Cell。实例化。

我已经将[{1}}隐藏了 MvxCollectionViewSource 方法。现在每当我加载数据时,dequed单元格都会保留旧数据。

我考虑了两个选项:

  1. 在GetOrCreateCellFor()方法中创建一个新Cell。它失败了,因为我需要在构造函数中传递一个IntPtr,而且由于与MvxCollectionViewCell的契约,我无法创建无法参与者。

  2. GetOrCreateCellFor()期间显示单元格时更新绑定。这不起作用,并显示旧数据。

  3. 出于什么方式?

    编辑:添加了代码

    - MyView的ViewWillAppear:MvxViewController

    WillDisplayCell()

    - MyCollectionViewSource:MvxCollectionViewSource

    public class MyView : MvxViewController{
        // other stuff
    public override void ViewWillAppear (bool animated)
        {
            var sourceOne = new MyCollectionViewSource (MyCollectionView, new NSString ("MyCollectionViewCell"));
            MyCollectionView.Source = sourceOne;
            var bindings = this.CreateBindingSet<MyView, MyViewModel> ();
    
            bindings.Bind (sourceOne)
                    .To (vm => vm.ItemList);
    
            bindings.Apply ();
            MyCollectionView.ReloadData ();
        }
    }
    

    - 细胞

    public MyCollectionViewSource : MvxCollectionViewSource{
    protected override UICollectionViewCell GetOrCreateCellFor (UICollectionView collectionView, NSIndexPath indexPath, object item)
            {
                return collectionView.DequeueReusableCell (new NSString ("MyCollectionViewCell"), indexPath) as MyCollectionViewCell;
            }
    public override void WillDisplayCell (UICollectionView collectionView, UICollectionViewCell cell, NSIndexPath indexPath)
            {
                var cellz = cell as MyCollectionViewCell;
                cellz.ClearAllBindings ();
                cellz.BindUrl ();
        }
    }
    

1 个答案:

答案 0 :(得分:0)

好的,所以我通过混合几种策略解决了这个问题。

  1. 在DataSource

  2. 中创建了SelectedItemNo属性
  3. 在Delegate方法DecelerationEnded中,我计算了单元格的当前索引,并更改 CollectionView.SelectedItemNo 属性以匹配当前可见单元格。