У меня есть (не виртуализированный) ItemsControl, который связывает свой ItemsSource с ObeservableCollection экземпляров ViewModel. Теперь, когда загружено большое количество экземпляров модели, все компоненты ViewModel необходимо добавить в эту коллекцию ObservableCollection. Как я могу добавить большое количество ViewModels без зависания потока пользовательского интерфейса?
Я предполагаю, что поток пользовательского интерфейса зависает, потому что каждый раз, когда добавляется новый элемент, ItemsControl должен обновляться и делать макет и т. Д. Снова и снова.
- Следует ли приостановить привязку, добавить все элементы, а затем возобновить? Если да, то как?
- Должен ли я переопределить ObservableCollection для реализации AddRange, чтобы для добавления нескольких элементов запускалось только одно событие CollectionChanged? Или как вариант просто заменить всю коллекцию?
- Или лучше добавить каждый элемент отдельно и вызывать Dispatcher.Invoke для каждого элемента отдельно? Так что я бы часто разблокировал.
Как вы обрабатываете большие динамические списки, которые нельзя виртуализировать?