CollectionView实时排序回调

时间:2014-09-26 19:06:25

标签: c# wpf treeview collectionviewsource listcollectionview

我有一个TreeView使用带有自定义ListCollectionView的{​​{1}}并进行实时整形以订购其子女。当在视图中重新排序当前选定的IComprarer时,我希望TreeViewItem自动滚动到TreeView的新位置。但是,当TreeViewItem应用新排序时,我找不到通知方式,而我想要的行为似乎没有内置到ListCollectionView中。

TreeViewControl重新计算其排序顺序时,是否有可以通知我?

1 个答案:

答案 0 :(得分:6)

我相信活动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.