2010-05-17 6 views
0

Silverlight DataGrid (ObservableCollection을 소스로 사용하여 PagedCollectionView에 DataGrid를 바인딩 함) 뒤에 관찰 가능 컬렉션을 새로 고침 할 때 문제가 발생했습니다.Silverlight DataGrid 새로 고침 관찰 가능 컬렉션

관찰 가능한 컬렉션을 지우고 새 항목을 컬렉션에 추가하면 DataGrid가 위쪽으로 다시 배치됩니다. DataGrid에서 스크롤 위치를 유지하기를 원합니다. RemoveAt 메서드를 사용하여 컬렉션의 항목을 하나씩 제거하고 새 항목을 하나씩 추가하면 다소 발생합니다. 그러나 Clear 메서드를 사용하여 모든 항목을 한 번에 제거하고 RemoveAt 메서드를 사용하여 항목을 하나씩 제거하는 것의 차이점은 무엇입니까?

답변

0

DataGrid는 스크롤 위치를 최상위 항목으로 추적합니다. 모든 항목을 지울 때 항목이 없어 DataGrid 스크롤이 더 이상 존재하지 않습니다. 스크롤 위치가 논리적 인 의미를 갖기 위해서는 DataGrid에 적어도 하나의 항목이 있어야합니다.

ObservableCollection을 사용하여 clear를 호출하면 CollectionChanged 이벤트가 발생하고 EventArgs.Action은 NotifyCollectionChangedAction.Reset으로 설정되어 제거되지 않을 수 있습니다. Clear를 사용하여 설정 한 경우 NotifyCollectionChangedAction.Reset을 던지지 않는 자신의 INotifyCollectionChanged 컬렉션을 구현해야 할 것입니다.

+1

그러나 항목을 하나씩 제거하면 새 항목을 추가하기 전에 DataGrid에 항목이 없게됩니다. – Krimson

관련 문제