CollectionView实时排序回调
问题描述:
我有一个TreeView
使用ListCollectionView
与自定义IComprarer
和生活塑造,以订购其子女。当当前选择的TreeViewItem
在视图中重新排序时,我想TreeView
自动滚动到TreeViewItem
的新位置。但是,我无法找到ListCollectionView
应用新排序时得到通知的方式,我想要的行为似乎并未纳入TreeViewControl
。CollectionView实时排序回调
当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.
但ListCollectionView的人不能没有的东西hapening – Paparazzi 2014-09-26 19:24:09
你说得对,我可以扎入每个项目的'PropertyChanged'事件,并听取更改申请一个新的排序,并侦听'TreeView'的'ItemsSource'上的'CollectionChanged'事件是为了将处理程序附加/分离到每个项目,但这是很多工作。工作'ListCollectionView'已经在表面下为我做了。如果我需要经过这么多的努力,我可能只是完全跳过实况整形,并在ViewModel中手动排序我的列表。 – 2014-09-26 19:40:11
@NathanFriend是不是'CollectionChanged'应该做你想做的?你甚至尝试过处理这个事件吗? – 2014-09-26 19:53:03