我一直在试图找出如何做到这一点。当我有一个自定义控件时,我试图查看控件ItemsSource中的集合更改。我想使用反应性扩展,以便可以轻松地处理事件监视并避免复杂的弱事件模式。当我的ItemsSource设置为ListCollectionView(来自xaml中的CollectionViewSource)或ReadOnlyObservableCollection时,FromEventPattern引发错误:“在类型为'System.Windows.Data.ListCollectionView'的对象上找不到事件'CollectionChanged'。” 这些类通过显式实现INotifyCollectionChanged来隐藏INotifyCollectionChanged。这是我的代码。这是Reactive Extensions中的错误还是我做错了?
IDisposable WatchCollection(INotifyCollectionChanged inc)
{
return Observable.FromEventPattern<INotifyCollectionChanged, NotifyCollectionChangedEventArgs>(inc, "CollectionChanged").Subscribe(ep =>
{
ItemsChanged();
Refresh();
});
}
我认为问题出在这里。
正确的实现应为:
private static IObservable<EventPattern<TSender, TEventArgs>> FromEventPattern_<TSender, TEventArgs>(object target, string eventName, IScheduler scheduler)
{
return FromEventPattern_<TSender, TEventArgs, EventPattern<TSender, TEventArgs>>(typeof(TSender), target, eventName, (sender, args) => new EventPattern<TSender, TEventArgs>(sender, args), scheduler);
}
提起问题1239。
同时,您可以将其更改为:
return Observable
.FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
e => inc.CollectionChanged += e,
e => inc.CollectionChanged -= e)
.Subscribe(ep =>
{
ItemsChanged();
Refresh();
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句