CollectionView实时排序回调

本文关键字:回调 排序 实时 CollectionView | 更新日期: 2023-09-27 18:24:45

我有一个TreeView,它使用一个带有自定义IComprarerListCollectionView和实时成型来订购其子级。当当前选择的TreeViewItem在视图中重新排序时,我希望TreeView自动滚动到TreeViewItem的新位置。然而,当ListCollectionView应用新排序时,我找不到通知的方法,而且我想要的行为似乎没有内置在TreeViewControl中。

ListCollectionView重新计算其排序顺序时,有没有办法通知我?

CollectionView实时排序回调

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