2014-09-26 3 views
1

TreeView 나는 ListCollectionView을 사용자 지정 IComprarer과 함께 사용하여 라이브 주문을 통해 자녀를 주문합니다. 현재 선택된 TreeViewItem이보기에서 다시 정렬되면 TreeView을 자동으로 TreeViewItem의 새 위치로 스크롤하고 싶습니다. 그러나 ListCollectionView이 새 정렬을 적용 할 때 알림을받을 수있는 방법을 찾을 수 없으며 원하는 동작이 TreeViewControl에 내장되어 있지 않은 것 같습니다.콜렉션 라이브 콜백 콜백

ListCollectionView이 정렬 순서를 다시 계산할 때 알림을받을 수있는 방법이 있습니까?

+0

그러나 ListCollectionView를 당신은, 내가 바로 각 항목의'PropertyChanged' 이벤트에 넥타이 변경을 수신 할 수있는이 생긴 – Paparazzi

+0

뭔가없이 새 정렬을 적용하고, 수신 안 'TreeView'의'ItemsSource'에'CollectionChanged' 이벤트를 추가하여 각 항목에 핸들러를 연결/분리 할 수 ​​있습니다. 그러나 이것은 많은 작업입니다. ListCollectionView가 나를 위해 표면 아래에서 이미 작업하고 있음. 그렇게 많은 노력을 기울여야한다면 ViewModel에서 라이브 모양을 건너 뛰고 내 목록을 수동으로 정렬 할 수 있습니다. –

+0

@NathanFriend는 'CollectionChanged'가 원하는 것을해야하지 않습니까? 그 사건을 다 처리하려고 했니? –

답변

4

나는 CollectionChanged 이벤트가 필요하다고 생각합니다. 당신이 뭔가를 할 수 있습니다

((ICollectionView)yourListCollectionView).CollectionChanged += handler; 

우리가 여기에 캐스팅 CollectionChanged (이 인터페이스에서 ICollectionView 상속을) INotifyPropertyChanged의 멤버로 구현되어있는 이유를 여기에 소스 코드 :

event NotifyCollectionChangedEventHandler INotifyCollectionChanged.CollectionChanged 
{ 
    add { 
      CollectionChanged += value; 
    } 
    remove { 
      CollectionChanged -= value; 
    } 
} 

이 구현은 명시 적입니다. 따라서 이벤트는 공개 멤버로서의 일반적인 액세스로부터 숨겨집니다. 해당 멤버를 노출하려면 인스턴스를 ICollectionView 또는 INotifyPropertyChanged으로 캐스팅 할 수 있습니다.

. 명시 적으로 인터페이스를 구현할 때는 인터페이스 멤버에 액세스하기 전에 명시 적으로 해당 인터페이스로 인스턴스를 캐스팅해야합니다. 구현 인터페이스에 대한

예 :

public interface IA { 
    void Test(); 
} 
//implicitly implement 
public class A : IA { 
    public void Test() { ... } 
} 
var a = new A(); 
a.Test();//you can do this 


//explicitly implement 
public class A : IA { 
    void IA.Test() { ... } //note that there is no public and the interface name 
          // is required 
} 
var a = new A(); 
((IA)a).Test(); //this is how you do it.