Silverlight 保存绑定列表框';基础集合更改时的滚动位置

Silverlight 保存绑定列表框';基础集合更改时的滚动位置,silverlight,listbox,viewmodel,scrollviewer,Silverlight,Listbox,Viewmodel,Scrollviewer,我有一个ScrollViewer和一个列表框,它绑定到视图模型中的一个ObservableCollection。ScrollViewer被最大化以占用父容器的所有可用空间。我发现,当集合被修改并最终生成的ListBoxItems超过ScrollViewer的可视区域时,ScrollViewer会向下滚动以显示ListBox中的最后一项。如何在更新子列表框的项目时防止ScrollViewer滚动? 每当视图模型中的集合更新时,我希望滚动位置保持不变。 提前谢谢 你必须自己处理这件事。ListBox

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

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

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

这有一个
GetItemsInView
extensions方法,它将提供可见项的列表