2010-05-17 3 views
0

У меня возникла проблема, когда я обновляю наблюдаемую коллекцию за моим Silverlight DataGrid (DataGrid привязывается к PagedCollectionView с ObservableCollection как источник).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