首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据虚拟化转移多选择时的DataGrid请求

使用数据虚拟化转移多选择时的DataGrid请求
EN

Stack Overflow用户
提问于 2013-01-15 14:06:29
回答 1查看 1.4K关注 0票数 6

算上4个月前的post,不幸的是没有收到任何答复。

我基本上是站在相同的问题,当使用多重选择在一个数据加法与移位。

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

因此,我发现,DataGrid实际上期望从索引0到选择的最后一个所有项。显然,对于包含100万项的列表来说,这并不理想,因为这将导致从0到500,050之间对每一项的请求,从而加载所有表单数据库。

所以我的问题应该和上面贴的但以理的问题一样:

  • 为什么DataGrid多次请求项(选择的项被请求了6-7次,没有明显的原因)?
  • 有没有一种方法可以告诉DataGrid不要使用枚举数,只接受所选的项,而不从0开始迭代?

非常感谢您,希望我有更多的运气,至少能得到发人深省的答案,因为在数据虚拟化方面没有什么可找到的。

EN

回答 1

Stack Overflow用户

发布于 2013-01-16 07:50:13

我找到了解决这个问题的办法(至少我可以说它对我有用)。

基本上,我所做的就是愚弄VirtualList,使我执行以下代码:

代码语言:javascript
复制
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);
}

这样,我将始终获得真正在列表中的项,但当它是虚拟化的一部分时,不会返回任何内容。

当然,这可能会导致其他一些问题,但到目前为止,这是我最关心的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14339467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档