【问题标题】:INotifycollectionchanged on ICollection<T> objectINotifycollectionchanged 在 ICollection<T> 对象上
【发布时间】:2015-02-19 09:12:19
【问题描述】:

鉴于我无法将对象的类型更改为 observablecollection,我想观察 Icollection 对象的变化。如何实现?

mycollectionobserver = Observable.FromEventPattern<NotifyCollectionChangedEventArgs>  (source.IcollectionItems, "CollectionChanged").Subscribe(OnItemsChanged);

【问题讨论】:

  • 我使用了类型转换:mycollectionobserver = Observable.FromEventPattern (source.IcollectionItems as INotifyCollectionChanged, "CollectionChanged").Subscribe(OnItemsChanged);
  • ICollection&lt;T&gt; 没有实现INotifyCollectionChanged,所以只要你使用as 投射它,你就会得到null。 Peter 的回答非常正确——您需要实现一个包装类,但由于您无法更改类型,那么您就不走运了。

标签: c# system.reactive observer-pattern inotifycollectionchanged


【解决方案1】:

实际修改集合的代码是什么?您是否能够将您自己的对象引用传递给该代码,而不是对原始 ICollection&lt;T&gt; 对象的引用?

如果第二个问题的答案是“否”,那么你就不走运了。但是如果你可以用你自己的替换对象引用,那么你可以实现一个围绕ICollection&lt;T&gt;对象的包装器,它本身实现了INotifyCollectionChanged。这样,您自己的对象将能够看到对集合的每一次修改并引发适当的INotifyCollectionChanged 事件。

如果您不能这样做,那么修改集合的代码将无法使用您的自定义实现,并且始终能够修改集合,而您自己的代码没有办法知道它。

最后,请注意有人可能已经编写了这样的包装器。我没有通过快速谷歌搜索找到任何东西,但我并没有很努力。如果确实存在,我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2010-12-05
    • 2010-12-05
    • 2010-12-12
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多