2014-09-26 28 views
1

我有一個TreeView使用ListCollectionView與自定義IComprarer和生活塑造,以訂購其子女。噹噹前選擇的TreeViewItem在視圖中重新排序時,我想TreeView自動滾動到TreeViewItem的新位置。但是,我無法找到ListCollectionView應用新排序時得到通知的方式,我想要的行爲似乎並未納入TreeViewControlCollectionView實時排序回調

ListCollectionView重新計算排序順序時,我可以通知我嗎?

+0

但ListCollectionView的人不能沒有的東西hapening – Paparazzi 2014-09-26 19:24:09

+0

你說得對,我可以扎入每個項目的'PropertyChanged'事件,並聽取更改申請一個新的排序,並偵聽'TreeView'的'ItemsSource'上的'CollectionChanged'事件是爲了將處理程序附加/分離到每個項目,但這是很多工作。工作'ListCollectionView'已經在表面下爲我做了。如果我需要經過這麼多的努力,我可能只是完全跳過實況整形,並在ViewModel中手動排序我的列表。 – 2014-09-26 19:40:11

+0

@NathanFriend是不是'CollectionChanged'應該做你想做的?你甚至嘗試過處理這個事件嗎? – 2014-09-26 19:53:03

回答

4

我相信事件CollectionChanged是你需要的。你可以做這樣的事情:

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

,我們要在這裏投是CollectionChanged是爲INotifyPropertyChanged成員(在這個界面ICollectionView繼承)實現的原因,源代碼在這裏:

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

這實施是明確。因此,作爲公衆成員,該活動隱藏了正常訪問權限。要公開該成員,您可以將實例投射到ICollectionViewINotifyPropertyChanged

。當明確實現接口時,必須在能夠訪問接口成員之前將實例顯式轉換到該接口。

有關實現接口的實例:

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. 
相關問題