DataGrid请求在数据虚拟化的情况下多选移动

DataGrid请求在数据虚拟化的情况下多选移动

问题描述:

将4个月前的post加起来,遗憾的是没有收到任何答案。DataGrid请求在数据虚拟化的情况下多选移动

我基本上站在同一个问题之前,在shiftgrid中使用datagrid多选。

当在一个巨大的列表中间的某个地方(比如网格中有1,000,000个项目,所有数据都是虚拟化的),我使用shift +鼠标单击从500,000到500,050进行选择时,网格调用“GetEnumerator() “我虚拟列表的方法(类似于文森特和保罗的实现)。到目前为止我所做的仅仅是缓存页面上的SelectMany。但不幸的是导致行没有被正确选择(而按Ctrl +鼠标点击做的工作!)。

所以我发现的是,DataGrid实际上预计所有项目从索引0到最后的选择。很显然,这对于1米物品清单并不理想,因为这会导致从0到(在我的示例中)500,050的每个物品的请求,从而加载所有数据库。

所以我的问题是一样的第丹尼尔elinked上面贴:

  • 为什么DataGrid中要求的项目多次(请选择项〜6-7次在一排没有明显的原因)?

  • 有没有办法告诉DataGrid不要使用枚举器,只是选择的项目,而不是从0迭代通过?

非常感谢您,希望我至少能够有更多的好运,因为在数据虚拟化方面没有太多可以找到的想法。

我发现了这个问题的解决方案(至少我可以说它适用于我)。

我基本上都被愚弄VirtualList因为这样,我做了下面的代码:

for (int i = 0; i < Count; i++) 
{ 
    int pageIndex = i/PageSize; 
    int pageOffset = i%PageSize; 
    IList<TItem> page; 
    if (pages.TryGetValue(pageIndex, out page)) 
    { 
    yield return page[pageOffset]; 
    } 
    yield return default(TItem); 
} 

这样,我总是会得到那些真正在列表中的项目,但返回任何结果当它是一部分的虚拟化。

当然,这可能会导致一些其他问题,但这是迄今为止我得到的最接近这一点。