2010-05-17 118 views
0

我在刷新Silverlight DataGrid後面的可觀察集合(DataGrid以ObservableCollection作爲源綁定到PagedCollectionView)時遇到問題。Silverlight DataGrid刷新可觀察集合

當我清除可觀察集合並將新項目添加到集合時,DataGrid重新定位到頂部。我想讓DataGrid保持滾動位置。這似乎有點發生,如果我用RemoveAt方法逐個刪除集合中的項目並逐個添加新項目。但是爲什麼使用Clear方法一次刪除所有項目並使用RemoveAt方法逐個刪除項目之間存在這種差異?

回答

0

DataGrid跟蹤滾動位置作爲最頂級項目。清除所有項目時,DataGrid滾動不再存在,因爲沒有項目。爲了使滾動位置具有邏輯意義,DataGrid必須至少包含一個項目。

這個問題很可能來自使用ObservableCollection時,當您調用清除它引發CollectionChanged事件與EventArgs.Action設置爲NotifyCollectionChangedAction.Reset不能刪除。如果你使用Clear,你可能需要實現你自己的INotifyCollectionChanged集合,它永遠不會拋出NotifyCollectionChangedAction.Reset eset。

+1

但是,當我逐個刪除項目時,在開始添加新項目之前,DataGrid中沒有任何項目。 – Krimson 2010-05-18 11:07:02