gpt4 book ai didi

performance - ItemsControl.ItemsSource MVVM 性能

转载 作者:行者123 更新时间:2023-12-02 21:49:58 26 4
gpt4 key购买 nike

我有一个(非虚拟化)ItemsControl,它将其 ItemsSource 绑定(bind)到 ViewModel 实例的 ObeservableCollection。现在,一旦加载大量 Model 实例,所有 ViewModel 补充都需要添加到该 ObservableCollection 中。如何添加大量 ViewModel 而不会导致 UI 线程挂起?

我认为 UI 线程挂起,因为每次添加新项目时,ItemsControl 都需要更新自身并一遍又一遍地进行布局等。

  • 我是否应该暂停绑定(bind)添加所有项目然后恢复?如果是这样,怎么办?
  • 我应该覆盖ObservableCollection 来实现AddRange 所以只有 1 个 CollectionChanged添加多个时会触发事件项目?或者只是替换整个集合?
  • 还是这样更好分别添加每个项目并调用Dispatcher.Invoke 每个项目分别地?所以我会解锁经常。

如何处理无法虚拟化的大型动态列表?

最佳答案

您可以创建一个派生于 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);
}
}
}

关于performance - ItemsControl.ItemsSource MVVM 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2460557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com