CollectionView实时排序回调
本文关键字:回调 排序 实时 CollectionView | 更新日期: 2023-09-27 18:24:45
我有一个TreeView
,它使用一个带有自定义IComprarer
的ListCollectionView
和实时成型来订购其子级。当当前选择的TreeViewItem
在视图中重新排序时,我希望TreeView
自动滚动到TreeViewItem
的新位置。然而,当ListCollectionView
应用新排序时,我找不到通知的方法,而且我想要的行为似乎没有内置在TreeViewControl
中。
当ListCollectionView
重新计算其排序顺序时,有没有办法通知我?
我相信CollectionChanged
事件正是您所需要的。你可以这样做:
((ICollectionView)yourListCollectionView).CollectionChanged += handler;
我们必须在这里强制转换的原因是CollectionChanged
是作为INotifyPropertyChanged
的成员实现的(ICollectionView
继承自该接口),这里的源代码:
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.