bit*_*onk 5 performance itemscontrol mvvm itemssource
我有一个(非虚拟化的)ItemsControl,它将ItemsSource绑定到ViewModel实例的ObeservableCollection.现在,一旦加载了大量的Model实例,就需要将所有ViewModel补充添加到该ObservableCollection中.如何在不使UI线程挂起的情况下添加大量ViewModel?
我想UI线程会挂起,因为每次添加新项目时,ItemsControl都需要自我更新并一遍又一遍地进行布局等.
如何处理无法虚拟化的大型动态列表?
Wim*_*nen 10
您可以创建一个从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);
}
}
}
Run Code Online (Sandbox Code Playgroud)