我有一个TreeView
使用带有自定义ListCollectionView
的{{1}}并进行实时整形以订购其子女。当在视图中重新排序当前选定的IComprarer
时,我希望TreeViewItem
自动滚动到TreeView
的新位置。但是,当TreeViewItem
应用新排序时,我找不到通知方式,而我想要的行为似乎没有内置到ListCollectionView
中。
当TreeViewControl
重新计算其排序顺序时,是否有可以通知我?
答案 0 :(得分:6)
我相信活动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.