首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可观察到的FromEventPattern INotifyCollectionChanged错误

可观察到的FromEventPattern INotifyCollectionChanged错误
EN

Stack Overflow用户
提问于 2020-06-27 04:55:18
回答 1查看 109关注 0票数 0

我一直在努力想办法做到这一点。当我有一个自定义控件时,我试图在控件ItemsSource中观察集合的变化。我想使用反应式扩展,这样我就可以轻松地处理事件观看,并避免复杂的弱事件模式。当我的ItemsSource设置为ListCollectionView (来自xaml中的CollectionViewSource )或ReadOnlyObservableCollection时,FromEventPattern会抛出错误:“无法在类型为‘System.Windows.Data.ListCollectionView’的对象上找到事件'CollectionChanged‘。”这些类通过显式实现INotifyCollectionChanged来隐藏INotifyCollectionChanged。这是我的代码。这是反应式扩展中的一个bug,还是我做错了?

代码语言:javascript
复制
 IDisposable WatchCollection(INotifyCollectionChanged inc)
    {
        return Observable.FromEventPattern<INotifyCollectionChanged, NotifyCollectionChangedEventArgs>(inc, "CollectionChanged").Subscribe(ep =>
        {
            ItemsChanged();
            Refresh();

        });
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 08:15:39

我认为问题出在here

正确的实现应该是:

代码语言:javascript
复制
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);
}

提交了issue 1239

同时,您可以将其更改为:

代码语言:javascript
复制
return Observable
    .FromEventPattern<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
        e => inc.CollectionChanged += e, 
        e => inc.CollectionChanged -= e)
    .Subscribe(ep =>
    {
        ItemsChanged();
        Refresh();
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62602717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档