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

时间:2011-06-29 05:48:26

标签: silverlight listbox viewmodel scrollviewer

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

1 个答案:

答案 0 :(得分:0)

您将不得不自己管理。 ListBoxScrollIntoView方法,可让您滚动到特定位置:

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

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

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

这有一个GetItemsInView扩展方法,可以提供可见项列表。