我正在使用 WPF/.NET 4,当我将 VirtualizingStackPanel.VirtualizationMode="Recycling" 属性添加到我的 ListBoxes 时,它会导致滚动时一遍又一遍地重复相同的列表项。例如,假设我有一个包含 100 个项目的 ListBox,一次可见 10 个。当 ListBox 首次加载时,我看到项目 1 - 10,但是当我开始向下滚动以查看剩余项目 11 - 100 时,项目 1 - 10 在我向下滚动时一遍又一遍地重复,所以我永远无法查看项目11 - 100. 如果我将 Recycling 改回 Standard,那么一切正常,但滚动速度非常慢(我的 ListItems 相当复杂,其中包含多个图像、文本字段和按钮)。当回收打开时,滚动速度非常快,但我只能查看项目 1 - 10。关于什么的任何想法 错了或如何解决?提前致谢。
问问题
3105 次
1 回答
6
顾名思义,回收模式通过重用呈现的 ListBoxItem 来工作。当不再需要 ListBox 项来显示已滚动出列表的项时,ListBox 将重新使用它来显示已滚动到视图中的项。
要更改 ListBoxItem 显示的内容,ListBox 只需将其 DataContext 属性设置为新项目。这要求 ListBoxItem 的内容必须正确响应 DataContextChanged 事件。如果您只使用数据绑定来填充控件,这将自动发生。但是,如果正如您的评论所暗示的那样,您正在使用一些代码隐藏来更新属性,那么您需要确保您的事件处理代码正在完成这项工作。
于 2011-07-06T13:38:50.903 回答