我从UICollectionView
继承了MvxViewController
。它包含继承自MvxCollectionViewCell
的单元格。数据通过UICollectionView
中的 CreateBindingSet()绑定到源,我使用 DelayBind()将数据绑定到Cell。实例化。
我已经将[{1}}隐藏了 MvxCollectionViewSource
方法。现在每当我加载数据时,dequed单元格都会保留旧数据。
我考虑了两个选项:
在GetOrCreateCellFor()方法中创建一个新Cell。它失败了,因为我需要在构造函数中传递一个IntPtr,而且由于与MvxCollectionViewCell的契约,我无法创建无法参与者。
在GetOrCreateCellFor()
期间显示单元格时更新绑定。这不起作用,并显示旧数据。
出于什么方式?
编辑:添加了代码
- 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 ();
}
}
答案 0 :(得分:0)
好的,所以我通过混合几种策略解决了这个问题。
在DataSource
SelectedItemNo
属性
在Delegate方法DecelerationEnded
中,我计算了单元格的当前索引,并更改 CollectionView.SelectedItemNo 属性以匹配当前可见单元格。