3

私は逆コンパイラを使用して周りを見回していて、今まで見たことのないObservableCollection<T>奇妙なOnPropertyChangedコードを見ました。

public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged
{    
    private const string IndexerName = "Item[]";

    protected override void ClearItems()
    {
        ...
        base.OnPropertyChanged("Count");
        base.OnPropertyChanged("Item[]");
        ...
    }
}

呼び出しは何OnPropertyChanged("Item[]")を行い、自分のコードを書くときにどのように役立ちますか?

'Item' はオブジェクトのプロパティではなく、' ' は確かに 'any' プロパティ名の一部ではないOnPropertyChangedため、標準の呼び出しとは異なることをしているに違いありません。[]

4

1 に答える 1

2

への呼び出しOnPropertyChanged("Item[]")は、 の精神に従う必要がありINotifyPropertyChangedます。デフォルトのインデクサーによって返されるデータItemが変更されました。

特定の例では、コレクションがクリアされているため、コレクションの特定のアイテムにインデックスを付ける場合は、関心のあるオブジェクト参照が異なる可能性があることを通知する必要があります。

編集

インデクサーへのバインディングに関する Kevin のコメントの後、バインディングをテストするアプリを作成しました。

を作成し、次のObservableCollection<int>ように入力しました。

this.Indexed.Add(1);
this.Indexed.Add(2);
this.Indexed.Add(3);

このようにインデクサーを介して何かにバインドすると、次のように表示されます3

<TextBlock Text="{Binding Indexed[2]}" />

そして、実行時にそのインデックスでオブジェクトを変更します。

this.Indexed.Insert(2, 10);

TextBlockが更新され、新しい値が表示されます10

于 2012-08-08T19:54:04.993 に答える