为什么CollectionView.CollectionChanged受到保护?

Gro*_*kys 6 collections wpf

我想监视对CollectionView的更改,但CollectionChanged事件受到保护.我该怎么做?当然必须有一种方式来订阅此事件 - 列表控件必须以某种方式执行此操作.

我可以将SourceCollection转换为INotifyCollectionChanged并在那里添加一个事件,但这似乎是不必要的混乱.

nmc*_*ean 5

...列表控件必须以某种方式执行此操作。

我可以将SourceCollection强制转换为INotifyCollectionChanged并在其中添加一个事件,但这似乎不必要地混乱。

实际上,这正是列表控件执行此操作的方式。这来自ItemsControl的源代码(可通过http://www.dotnetframework.org/找到):

((INotifyCollectionChanged)_items).CollectionChanged += new NotifyCollectionChangedEventHandler(OnItemCollectionChanged);
Run Code Online (Sandbox Code Playgroud)

您可能打算将CollectionViews作为接口ICollectionView公开,该接口本身继承了INotifyCollectionChanged并提供了诸如CurrentItem之类的CollectionView属性。


Jas*_*tts 1

为什么不使用 ObservableCollection 来代替呢?

  • 因为我正在过滤集合。 (2认同)