2011-04-08 1 views
4

DataGrid 컨트롤이나 MultiSelectors와 관련된 문제인지 잘 모르겠지만 그리드 내에서 여러 행을 선택하면 CollectionChanged 이벤트는 다음과 같습니다. 매 행마다 발사됩니다. 마우스를 사용하여 '드래그'하면이 방법이 적합하지만 여러 행을 선택하려면 Shift 키를 누른 채로 클릭하거나 왼쪽 상단의 'select-all-rows'버튼을 클릭하면됩니다.WPF DataGrid (MultiSelector?)가 SelectedItems CollectionChanged 이벤트를 여러 번 발생시키는 중

저는 Begin/EndUpdateSelectedItems 메서드와 IsUpdatingSelectedItems 속성이 있다는 것을 MultiSelector에서 확인했습니다. 불행히도이 컬렉션/이벤트에 대한 나의 소비자는 그 소스를 알지 못합니다.

업데이트가 완료되면 DataGrid/SelectedItems 컬렉션은 CollectionChanged 알림 만 보낼 수있는 방법이 있습니까?

감사합니다.

편집 : 나는 데이터 그리드 IsUpdatingSelectedItems 속성에 대한 큰 선택을 변경하는 경우에도 설정되지 않는 것으로 나타났습니다.

편집 : 전체 변경 후 DataGrid SelectionChanged 이벤트가 한 번만 올바르게 발생하는 것으로 나타났습니다. 이 작업은 단순한 데이터 바인딩 가능성을 없애기 때문에 유감 스럽지만 SelectedItems 컬렉션의 소비자를 제어 할 수 있다면 잠재적 인 해결 방법입니다.

답변

1

완벽을 기하기 위해 제 질문에 대답하겠습니다. WPF 컨트롤은 일반적으로 CollectionChanged 이벤트 핸들러에서 단일 요소 변경을 처리 할 수 ​​없다는 것을 알 수 있습니다. 즉, '모든 항목에 대해 CollectionChanged'워크 플로가 오른쪽 프레임 워크의 현재 양식으로되어 있음을 의미합니다. 그러나 개인적으로 나는 이것이 끔찍한 성능 문제라고 생각합니다.

0

뷰 모델 :

private MultiSelector _selectedItems; 

    Public MultiSelector SelectedItems 
    { 
     get {return _selectedItems; 
     set { _selectedItems=value;}        
     } 

바인드 selectedItems를 데이터 격자의 selectedItem가에 속성을 추가 System.Windows.Controls.Primitives.MultiSelector

관련 문제