WinRT XAML ScrollViewer/ListView 渲染巨大的列表在设备上不起作用

WinRT XAML ScrollViewer/ListView rendering huge list doesn't work on device

从以下代码开始

<Grid>
    <ScrollViewer>
        <ListView Name="listview" ItemsSource="{Binding Source={StaticResource list}}" />                   
    </ScrollViewer>
</Grid>

我有大约 1000 项 winrt 应用程序的庞大列表。滚动需要太多时间,所以我实现了滚动到顶部和底部的功能。

listview.SelectedIndex 
listview.UpdateLayout();
listview.ScrollIntoView(SelectedItem);

所有这些在 ListView 中有大约 1000 个项目的模拟器上运行良好。但是当我 运行 带有 Surface 设备的应用程序时,此方法不起作用。它实际上失败并在尝试渲染 ListView.

时绘制黑色矩形

我刚刚在这上面浪费了两天时间。我尝试了很多东西但没有运气。有人能告诉我如何使用具有 ListViewScrollViewer 并在 Surface 设备本身上使用 MVVM 来处理长列表。只需在列表超过 1000 的 Surface 设备上进行平滑滚动,同时以编程方式从头到尾移动。

PS:实施搜索不是选项。

您应该移除外部的 ScrollViewer,因为这会破坏虚拟化。除此之外,您可以滚动到大约 200 万像素 high/wide 的面板大小有限制。之后你会看到渲染问题。

解决这个问题的唯一方法相当复杂,需要从头开始编写您自己的列表控件。我认为还没有人这样做过。通常如果数据太大 - 人们会使用其他策略,例如分组和扩展组。