【问题标题】:Silverlight DataGrid refresh observable collectionSilverlight DataGrid 刷新可观察集合
【发布时间】:2010-05-17 15:22:24
【问题描述】:

刷新 Silverlight DataGrid 后面的可观察集合时遇到问题(DataGrid 绑定到以 ObservableCollection 作为源的 PagedCollectionView)。

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

【问题讨论】:

    标签: silverlight datagrid


    【解决方案1】:

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

    问题可能来自这样一个事实,即在调用 clear 时使用 ObservableCollection 会引发 CollectionChanged 事件,并且 EventArgs.Action 设置为 NotifyCollectionChangedAction.Reset 而不是删除。如果您打算使用 Clear,那么您可能需要实现自己的 INotifyCollectionChanged 集合,该集合永远不会抛出 NotifyCollectionChangedAction.Reset eset。

    【讨论】:

    • 但是当我一个接一个地删除项目时,在开始添加新项目之前,DataGrid 中也没有任何项目。
    猜你喜欢
    • 2016-11-08
    • 2015-03-07
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多