我正在使用WPF / .NET 4,当我将VirtualizingStackPanel.VirtualizationMode =“Recycling”属性添加到我的ListBox时,它会导致在滚动时反复重复相同的列表项。例如,假设我有一个包含100个项目的ListBox,一次可见10个。当ListBox首次加载时,我看到项目1 - 10,但当我开始向下滚动以查看剩余项目11 - 100时,项目1 - 10在我向下滚动时反复重复,所以我永远无法查看项目11 - 100.如果我将Recycling更改回Standard,那么一切正常,但滚动速度非常慢(我的ListItems相当复杂,其中有几个图像,文本字段和按钮)。当回收打开时,滚动速度非常快,但我只能查看项目1 - 10.任何有关错误或如何修复的想法?提前谢谢。
答案 0 :(得分:6)
回收模式的工作方式,顾名思义,通过重用渲染的ListBoxItems。当不再需要ListBox项来显示已从列表中滚动的项时,ListBox将重复使用它来显示已滚动到视图中的项。
要更改ListBoxItem显示的内容,ListBox只是将其DataContext属性设置为新项。这要求ListBoxItem的内容必须正确响应DataContextChanged事件。如果您仅使用数据绑定来填充控件,则会自动执行此操作。但是,如果您的评论暗示您使用一些代码隐藏来更新属性,那么您需要确保您的事件处理代码正在完成工作。