【发布时间】:2016-07-30 07:09:29
【问题描述】:
我正在使用绑定到 ViewModel 中的自定义 ObservableCollection 的无限滚动 UICollectionView。该单元格只有一个 UITextView,它数据绑定到模型对象中的字符串属性。
当我开始向下滚动时,我通过调用 OservableCollection 上的 AddRange 来显示更多项目。
public class MyCollection<T> : ObservableCollection<T>
{
public MyCollection()
: base()
{
}
public MyCollection(IEnumerable<T> collection)
: base(collection)
{
}
public MyCollection(List<T> list)
: base(list)
{
}
public void AddRange(IEnumerable<T> range)
{
foreach (var item in range)
{
Items.Add(item);
}
var dispatcher = Mvx.Resolve<IMvxMainThreadDispatcher>();
dispatcher.RequestMainThreadAction(() =>
{
this.OnPropertyChanged(new PropertyChangedEventArgs("Count"));
this.OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, range));
});
}
}
新项目已成功添加,但是一旦从通知更改事件重新加载集合视图,可见单元格项目可能会闪烁并在一瞬间显示错误的数据。加载更多数据到 UICollectionView 时是否可以防止可见单元格闪烁?
【问题讨论】:
-
你要重新加载整个collectionview吗?不要那样做。只需添加新闻单元格
-
@Paulw11 感谢您的建议。是的,我假设 propertyChangeEvent 触发了整个 collectionview 的重新加载。你知道我怎么只能触发不可见的新单元格的重新加载吗?我可以调用 collectionView.ReloadItems(indexPaths[]) 但我不知道如何检索新项目的索引路径。