У меня есть (невиртуализированный) ItemsControl, который связывает его ItemsSource с ObeservableCollection экземпляров ViewModel. Теперь однажды большие экземпляры Модели суммы загружается все потребности ViewModel complemnents, которые будут добавлены к тому ObservableCollection. Как я могу добавить большое количество ViewModels, не заставляя Поток UI зависнуть?
Я предполагаю, что Поток UI зависает, потому что каждый раз новый объект добавляется, ItemsControl должен обновить себя и делает расположение и т.д. много раз.
Как Вы обрабатываете большие динамические списки, которые не могут быть виртуализированы?
Вы можете создать класс, производный от 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);
}
}
}