2013-02-01 3 views
1

System.Windows.Controls.TreeView에서 상속받은 "MultiSelectTreeView"라는 사용자 지정 WPF 컨트롤에서 작업합니다. 그 목적은 다중 선택 및 드래그 앤 드롭을 허용하는 것입니다.WPF 관찰 가능 컬렉션의 여러 항목이 한꺼번에 수정되었음을 알리는 방법

이 MultiSelectTreeView 컨트롤이 포함 된보기의 xaml은 기본 뷰 모델에 의해 노출 된 ObservableCollection을 바인딩합니다.

끌어서 놓기 작업에 ObservableCollection에 대한 많은 제거/추가 (또는 이동) 작업이 필요할 수 있지만 단일 끌어서 놓기 작업에 대한 모든 작업을 명령 개체에 캡슐화해야합니다. 드래그 앤 드롭의 실행 취소/재실행을 단일 원자 작업으로 지원합니다.

ViewModel.ObservableCollection의 CollectionChanged 이벤트에 여러 이벤트가 발생하고 ViewModel의 관점에서 보았을 때 특정 추가/제거/이동 이벤트가 단독으로 존재하는지 여부를 알 수있는 방법이 없습니다. 일련의 이벤트 중 일부는 단일 사용자의 끌어서 놓기와 관련됩니다.

내가 같은 MultiSelectTreeView는이 뷰 모델의 구조 (잠시 ObservableCollection에의 CollectionChanged 이벤트를 풉니 다하기를) 기초의 깊이있는 지식의 모든 종류를 제어 제공하는 등 불안정한 솔루션의 모든 종류를 상상할 수 있지만,이 느끼지 않는다 맞아.

아마도 하나의 이벤트 만 발생시키는 .MoveRange() 메서드를 지원하는 ObservableCollection의 자체 하위 항목을 만들어야합니다.

몇 주 이상 WPF를 경험 한 사람이라면 이보다 훨씬 좋은 해결책을 제시 할 수 있습니다.

답변

관련 문제