WPF ListBox VirtualizingStackPanel.VirtualizationMode=“回收”会导致始终显示相同的列表项

StackOverflow https://stackoverflow.com/questions/4894351

我正在使用WPF / .NET 4,当我将VirtualizingStackPanel.VirtualizationMode=“ Recycling”属性添加到我的ListBoxes时,它会导致相同的列表项在滚动时一遍又一遍地重复。例如,假设我有一个列表框,其中包含100个项目,一次可见10个。当列表框第一次加载时,我看到项目1-10,但是当我开始向下滚动以查看其余项目11-100时,随着向下滚动,项目1-10会一遍又一遍地重复,因此我永远无法查看项目11-100。如果我将“回收”改回“标准”,则一切正常,但滚动速度非常慢(我的ListItem相当复杂,其中包含多个图像,文本字段和按钮)。启用“回收”时,滚动速度非常快,但是我只能查看项目1-10。关于出问题或如何解决的任何想法?预先感谢。

有帮助吗?

解决方案

顾名思义,回收模式通过重用渲染的ListBoxItems来工作。当不再需要ListBox项来显示从列表中滚动出来的项时,ListBox会重复使用它来显示已滚动到视图中的项。

要更改ListBoxItem的显示内容,ListBox只需将其DataContext属性设置为新项目。这要求ListBoxItem的内容必须正确响应DataContextChanged事件。如果仅使用数据绑定来填充控件,则会自动发生。但是,正如您的注释所暗示的那样,如果您正在使用一些代码隐藏功能来更新属性,那么您需要确保事件处理代码正在完成这项工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top