ItemsControl. Работа ItemsSource MVVM

У меня есть (невиртуализированный) ItemsControl, который связывает его ItemsSource с ObeservableCollection экземпляров ViewModel. Теперь однажды большие экземпляры Модели суммы загружается все потребности ViewModel complemnents, которые будут добавлены к тому ObservableCollection. Как я могу добавить большое количество ViewModels, не заставляя Поток UI зависнуть?

Я предполагаю, что Поток UI зависает, потому что каждый раз новый объект добавляется, ItemsControl должен обновить себя и делает расположение и т.д. много раз.

  • Я должен приостановить привязку, добавляют все объекты и затем возобновляются? Если так, как?
  • Я должен переопределить ObservableCollection для реализации AddRange, таким образом, только 1 Событие CollectionChanged уволено за добавление нескольких объектов? Или альтернативно просто замените целый набор?
  • Или лучше добавить каждого объекты отдельно и вызвать Диспетчера. Вызвать для каждого объекта отдельно? Таким образом, я часто разблокировал бы.

Как Вы обрабатываете большие динамические списки, которые не могут быть виртуализированы?

5
задан Shimmy 10 August 2010 в 00:38
поделиться

1 ответ

Вы можете создать класс, производный от ObservableCollection, который позволяет временно приостанавливать события CollectionChanged следующим образом:

public class SuspendableObservableCollection : ObservableCollection
{
    private bool suspended;

    public bool Suspended 
    {
        get
        {
            return this.suspended;
        }
        set
        {
            this.suspended = value;
            OnCollectionChanged(new NotifyCollectionChangedEventArgs(
                NotifyCollectionChangedAction.Reset));
        }
    }

    protected override void OnCollectionChanged(
        NotifyCollectionChangedEventArgs args)
    {
       if (!Suspended)
       {
           base.OnCollectionChanged(args);
       }
    }
}
10
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: