在基础集合更改时保留绑定列表框的滚动位置



我有一个ScrollViewer和一个ListBox,它绑定到视图模型中的ObservableCollection。ScrollViewer被最大化以占用父容器的所有可用空间。我发现,当集合被修改,最终产生的ListBoxItems超过了ScrollViewer可视区域的容纳量时,ScrollViewer会向下滚动以显示ListBox中的最后一个项目。更新子ListBox的项目时,如何防止ScrollViewer滚动?每当视图模型中的集合更新时,我希望滚动位置保持不变。提前感谢!

您必须自己管理。ListBox有一个ScrollIntoView方法,允许您滚动到特定位置:

http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.scrollintoview(v=VS.95).aspx

如果您需要,确定当前可见的项目并不容易。请参阅我作为WP7Controlb项目的一部分编写的ItemsControlExtensions

http://wp7contrib.codeplex.com/SourceControl/changeset/view/67473#1475881

这有一个GetItemsInView扩展方法,它将提供可见项目的列表。

最新更新