当我刷新Silverlight DataGrid后面的observable集合时遇到了一个问题(DataGrid绑定到一个带有ObservableCollection作为源的PagedCollectionView)。
当我清除可观察集合并将新项目添加到集合时,DataGrid会重新定位到顶部。我希望DataGrid保持滚动位置。如果我使用RemoveAt方法逐个删除集合中的项目并逐个添加新项目,这似乎有些发生。但是为什么使用Clear方法一次删除所有项目并使用RemoveAt方法逐个删除项目之间存在这种差异?
答案 0 :(得分:0)
DataGrid将滚动位置跟踪为最顶层的项目。当您清除所有项目时,DataGrid滚动不再存在,因为没有项目。为了使滚动位置具有任何逻辑意义,DataGrid必须包含至少一个项目。
问题可能来自以下事实:当您调用clear时使用ObservableCollection会抛出CollectionChanged
事件,并将EventArgs.Action设置为NotifyCollectionChangedAction.Reset
而不删除。如果你开始使用Clear,你可能需要实现自己的INotifyCollectionChanged
集合,它不会抛出NotifyCollectionChangedAction.Reset
eset。