算上4个月前的post,不幸的是没有收到任何答复。
我基本上是站在相同的问题,当使用多重选择在一个数据加法与移位。
当在一个巨大列表中的某个地方(比如网格中的1,000,000个条目,所有数据虚拟化了)和我使用shift +鼠标单击从500,000到500,050之间选择时,网格调用我的虚拟列表的"GetEnumerator()“方法(类似于文森特和Paul的实现)。到目前为止,我所做的只是缓存页面上的一个SelectMany。但不幸的是,这导致了行的选择不正确(而ctrl +鼠标单击完成了工作!)
因此,我发现,DataGrid实际上期望从索引0到选择的最后一个所有项。显然,对于包含100万项的列表来说,这并不理想,因为这将导致从0到500,050之间对每一项的请求,从而加载所有表单数据库。
所以我的问题应该和上面贴的但以理的问题一样:
非常感谢您,希望我有更多的运气,至少能得到发人深省的答案,因为在数据虚拟化方面没有什么可找到的。
发布于 2013-01-16 07:50:13
我找到了解决这个问题的办法(至少我可以说它对我有用)。
基本上,我所做的就是愚弄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);
}这样,我将始终获得真正在列表中的项,但当它是虚拟化的一部分时,不会返回任何内容。
当然,这可能会导致其他一些问题,但到目前为止,这是我最关心的问题。
https://stackoverflow.com/questions/14339467
复制相似问题