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
.
时绘制黑色矩形
我刚刚在这上面浪费了两天时间。我尝试了很多东西但没有运气。有人能告诉我如何使用具有 ListView
的 ScrollViewer
并在 Surface 设备本身上使用 MVVM 来处理长列表。只需在列表超过 1000 的 Surface 设备上进行平滑滚动,同时以编程方式从头到尾移动。
PS:实施搜索不是选项。
您应该移除外部的 ScrollViewer,因为这会破坏虚拟化。除此之外,您可以滚动到大约 200 万像素 high/wide 的面板大小有限制。之后你会看到渲染问题。
解决这个问题的唯一方法相当复杂,需要从头开始编写您自己的列表控件。我认为还没有人这样做过。通常如果数据太大 - 人们会使用其他策略,例如分组和扩展组。
从以下代码开始
<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
.
我刚刚在这上面浪费了两天时间。我尝试了很多东西但没有运气。有人能告诉我如何使用具有 ListView
的 ScrollViewer
并在 Surface 设备本身上使用 MVVM 来处理长列表。只需在列表超过 1000 的 Surface 设备上进行平滑滚动,同时以编程方式从头到尾移动。
PS:实施搜索不是选项。
您应该移除外部的 ScrollViewer,因为这会破坏虚拟化。除此之外,您可以滚动到大约 200 万像素 high/wide 的面板大小有限制。之后你会看到渲染问题。
解决这个问题的唯一方法相当复杂,需要从头开始编写您自己的列表控件。我认为还没有人这样做过。通常如果数据太大 - 人们会使用其他策略,例如分组和扩展组。