Silverlight DataGrid刷新可观察集合

时间:2010-05-17 15:22:24

标签: silverlight datagrid

当我刷新Silverlight DataGrid后面的observable集合时遇到了一个问题(DataGrid绑定到一个带有ObservableCollection作为源的PagedCollectionView)。

当我清除可观察集合并将新项目添加到集合时,DataGrid会重新定位到顶部。我希望DataGrid保持滚动位置。如果我使用RemoveAt方法逐个删除集合中的项目并逐个添加新项目,这似乎有些发生。但是为什么使用Clear方法一次删除所有项目并使用RemoveAt方法逐个删除项目之间存在这种差异?

1 个答案:

答案 0 :(得分:0)

DataGrid将滚动位置跟踪为最顶层的项目。当您清除所有项目时,DataGrid滚动不再存在,因为没有项目。为了使滚动位置具有任何逻辑意义,DataGrid必须包含至少一个项目。

问题可能来自以下事实:当您调用clear时使用ObservableCollection会抛出CollectionChanged事件,并将EventArgs.Action设置为NotifyCollectionChangedAction.Reset而不删除。如果你开始使用Clear,你可能需要实现自己的INotifyCollectionChanged集合,它不会抛出NotifyCollectionChangedAction.Reset eset。