【发布时间】:2015-01-01 10:16:24
【问题描述】:
在所有项目都加载并显示在 WPF ListView 中后会触发哪个事件? 我尝试优化在 ListView 中显示大量项目。 ListView 使用以下代码填充项目:
List<Artist> selectedArtistsList;
//Code to fill selectedArtistsList with about 6,000 items not shown here
CollectionViewSource selection1ViewSource = ((CollectionViewSource)(this.FindResource("selection1Source")));
Stopwatch stopWatch1 = new Stopwatch();
stopWatch1.Start();
selection1ViewSource.Source = selectedArtistsList;
stopWatch1.Stop();
Debug.Print("Time used: {0}ms", stopWatch1.ElapsedMilliseconds.ToString());
当我运行此代码时,我看到“使用时间 119 毫秒”或类似内容。但是在我在屏幕上看到 ListView 中的项目之前,还需要大约 3 秒。 是否有在 ListView 加载项目后触发的事件? 我有兴趣衡量 ListView 何时为用户准备就绪。
【问题讨论】:
-
试试
listView.ItemContainerGenerator.ItemsChanged。 WPF 在单独的线程上渲染,因此如果您想在渲染完成后运行代码,您可以尝试 Dispatcher.Invoke 优先级 -
如果这需要 3 秒,那么您可能没有进行虚拟化。发布您的 XAML。
-
谢谢@Blam,我会检查虚拟化。现在,在我知道如何准确检查显示我的列表需要多长时间之后,我可以更轻松地比较改进代码的不同方法。
标签: c# .net wpf listview events