WPF ListBox 在用户滚动时生成项目

3

我正在尝试使用ListBox向用户显示一个可能无限的选项列表。目前,我只是在任意点截断列表,但我想允许用户向下滚动到他们想要的地方。另外,我想尽可能避免生成不可见的项,因为必须对每个项进行一些计算。

我尝试编写listBox.ItemsSource = enumerable,希望它仅请求可见项,但实际上它会尝试读取所有项,如果存在无限多的项,则会导致无限循环。

我的最佳想法是添加一个监听器,每当ListBox向下滚动时通知它,并添加新项,以便始终在最后一个可见项之后有k个以上的项(其中k可能是一次可见的项目数,以便进行页面向下滚动)。

是否有一种更干净的方式来处理这个问题?

1个回答

7
我会使用一个`VirtualizingStackPanel`来减少UI绘制的元素数量,然后采用数据虚拟化技术来限制你在内存中保存的数据。更多详情请见这里(尤其是Bea Stolnitz在此引用的博客条目)。

看起来“数据虚拟化”是我在搜索中缺失的关键词。Bea Stolnitz的博客文章看起来很有用。 - perelman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接