我正在使用DataGrid
with CellEditingTemplates
。由于ItemsSource
使用了数据虚拟化集合(AlphaChiTech 解决方案),它一次只能按需获取大小为 100 个项目的页面。
它工作得很好,直到一个单元格被双击进入编辑表单,然后VirtualizingStackPanel
一个接一个地请求所有项目。当然,作为副作用,最终会请求所有页面。
有没有办法解决这个问题?
编辑:
我找到了一种解决方法,它可能会帮助我遇到这种情况的人:
最终我观察到,在切换到编辑表单后行高保持不变的情况下,VirtualizingStackPanel 并没有请求所有项目。在解决方法之前,我的编辑表单略高。
现在我设置了单元格(正常和编辑)中控件的 MinHeight,这样在切换到编辑表单时高度不会改变。
不幸的是,这仅在某些条件下有效。在某些情况下它不起作用:
使用
RowDetailsTemplate
. 一旦可见,虚拟化就被破坏了。我假设行详细信息属于行本身,因此行高再次增加。分别在 CollectionView 上分别引发 Collection 的 Reset 事件。根据我的经验,这通常是使用
DataGrids
.减少
Count
集合的数量(这也不会引发 Reset 事件)。
有趣的是,增加Count
集合的数量确实有效。但是我必须增强 AlphaChiTech 的功能(幸运的是,源代码在 github 上),因为没有Count
开箱即用的 Reset 事件就无法更改(至少我没有找到)。此外,DataGrid's
项目必须在之后立即刷新,否则会引发异常,说明ItemsControl
和集合确实具有不一致的状态。
行详细信息对我来说是可选的,但在不破坏数据虚拟化的情况下删除项目至关重要。因此,问题仍然存在。我的解决方法很可能会帮助拥有固定大小集合的人,但不幸的是不是我自己。