我的 C# WPF 应用程序中有一个ListView
with a GridView
。ItemsSource
绑定到在fromListCollectionView
上创建的a 。我将用于动态排序、过滤和分组,所有这些都可以从.ViewModel
ObservableCollection<MyClass>
ListCollectionView
View
当我更改过滤器或打开/关闭分组时,会重新创建所有可视列表视图项,这会导致 UI 冻结大约一秒钟。由于我显示了大约 250 个项目,并且大约有 10 列(其中一些具有带有进度条的单元格模板),因此这不足为奇。
现在,我知道显而易见的答案是启用虚拟化。但是,这会带来一些不良影响,例如滚动变得生涩或滚动条在滚动时改变其大小(分组时会发生这种情况,因为组的高度不同,因此虚拟化堆栈面板无法正确计算总高度首先)。
我想做的是为ListView
原始列表中的每个项目保留一个视觉元素(未过滤和未排序,ObservableCollection<MyClass>
即ListCollectionView
.
我希望这个解决方案能提高我的应用程序的性能,因为我很少更改原始列表,但我经常更改过滤、排序和分组。
ListView
我是否需要创建一个继承自(或)的自定义控件GridView
来执行此操作,还是有其他方法?