7

ObservableCollection私は、コレクションにいくつかのメカニズムをカプセル化するように機能する特殊なコレクションを実装しようとしていました。そのために、コレクションも継承しCollection、同じインターフェイスも実装しています。

コレクション変更ロジック全体を実際に実装する方法がわかりません。たとえば、オーバーライドされていない (仮想としてマークされていない) ため、そのメソッドを使用してアイテムが追加された場合、イベントCollection<T>.Addはどのように発生しますか?ObservableCollectionCollectionChanged

4

3 に答える 3

10

特定の質問に答えるには、仮想メソッドをCollection<T>.Add呼び出します (コレクションが読み取り専用でないことを確認した後)。実際、このメソッドをオーバーライドして挿入行い、関連する変更通知を発生させます。InsertItemObservableCollection<T>

于 2011-02-16T22:11:25.633 に答える
8

InsertItemこれは、オーバーライドされ、逆コンパイル時に確認できる呼び出しによって行われます。

protected override void InsertItem(int index, T item)
{
    this.CheckReentrancy();
    base.InsertItem(index, item);
    this.OnPropertyChanged("Count");
    this.OnPropertyChanged("Item[]");
    this.OnCollectionChanged(NotifyCollectionChangedAction.Add, item, index);
}
于 2011-02-16T22:14:48.543 に答える
0

重要なのは、ベース Collection メソッドをオーバーライドすることではなく、ICollection インターフェイスを実装することであることに注意してください。率直に言って、Collection クラスから継承するのではなく、コンストラクターで ICollection を受け取るアダプター クラスを作成することをお勧めします。そうすれば、メソッドは内部コレクションに委任され、適切なイベントが発生します。

于 2011-02-16T22:12:24.883 に答える