派生自 ReadOnlyObservableCollection 绑定

derive from ReadOnlyObservableCollection Binding

假设我有一个 ReadOnlyObservableCollection 类型的集合,我想注册到它的事件 CollectionChanged 这是受保护的...

我认为我可以用一种简单的方法克服它,所以我创建了我自己的 class 派生自 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;
}

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

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

你的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