从ReadOnlyObservableCollection绑定派生

本文关键字:派生 绑定 ReadOnlyObservableCollection | 更新日期: 2023-09-27 18:25:09

假设我有一个ReadOnlyObservableCollection类型的集合,并且我想注册到其受保护的事件CollectionChanged。。。

我认为我可以用一种简单的方法来克服它,所以我创建了自己的类,它派生自ReadOnlyObservableCollection,然后我订阅了该事件并调用了我自己的类:

public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
    public MyCollection(ObservableCollection<T> list) : base(list)
    {
        this.CollectionChanged += ThreadMessagesCollection_CollectionChanged;
        this.PropertyChanged += ThreadMessagesCollection_PropertyChanged;
    }
    private void ThreadMessagesCollection_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        PropertyChanged(sender, e);
    }
    private void ThreadMessagesCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        OnCollectionChanged(sender, e);
    }
    public delegate void CollectionChagedDelegate(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e);
    protected event PropertyChangedEventHandler PropertyChanged;
    public event NotifyCollectionChangedEventHandler  OnCollectionChanged;
}

但是,现在绑定不起作用。没有检测到异常。。。

你知道我做错了什么吗?或者我该如何克服它?

从ReadOnlyObservableCollection绑定派生

您的event OnCollectionChanged可能有问题,因为OnCollectionChanged已经是ReadOnlyObservableCollection的虚拟方法。

我建议这样试试:

public class MyCollection<T> : ReadOnlyObservableCollection<T>
{
  public MyCollection([NotNull] ObservableCollection<T> list) : base(list) {}
  protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs args)
  {
    base.OnCollectionChanged(args);
    OnMyCollectionChanged(args);
  }
  public event NotifyCollectionChangedEventHandler MyCollectionChanged;
  protected virtual void OnMyCollectionChanged(NotifyCollectionChangedEventArgs e)
  {
    NotifyCollectionChangedEventHandler handler = MyCollectionChanged;
    if (handler != null) handler(this, e);
  }
}

您不需要定义自己的委托,因为已经声明了NotifyCollectionChangedEventHandler