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