Я использую бесконечный прокручиваемый UICollectionView, который привязан к пользовательскому ObservableCollection, который находится в ViewModel. Ячейка имеет только UITextView, которая привязывается к атрибуту string в объекте модели.Предотвращение мерцания видимых ячеек UICollectionView
Когда я начинаю прокручивать вниз, я показываю больше предметов, вызывая AddRange на OservableCollection.
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));
});
}
}
Новые элементы добавляются успешно, однако после того, как CollectionView get's Reloaded от события изменения уведомления видимых элементов клеток могут мерцать и показывать неправильные данные доли секунды. Можно ли предотвратить мерцание видимых ячеек при загрузке большего количества данных в UICollectionView?
Вы перезагрузки всей CollectionView? Не делай этого. Просто добавьте новостные ячейки – Paulw11
@ Paulw11 благодарит за предложения. Да, я полагаю, что свойствоChangeEvent запускает перезагрузку всей коллекции. Вы знаете, как я могу только вызвать перезагрузку новых ячеек, которые не видны? Я мог бы вызвать collectionView.ReloadItems (indexPaths []), но я не знаю, как я могу получить индексные пути для новых элементов. – doorman