1

アイテムのコレクションを実装する最良の方法は何ですか。ここで:

  1. 各アイテムは異なるタイプである可能性があります
  2. 各アイテムは、その変更時に PropertyChanged イベントを発生させます (親クラスは INotifyPropertyChanged を実装します)

アップデート:

私はこのようなことを考えています: コレクション:

["Name", string:"John Doe"]
["Age", int:"32"]
["Profiles", List<Profiles>:"list of profiles"]

次のような新しいアイテムを追加できます。

Collection.Add("NewItem", value);

そして、それを変更します:

Collection["NewItem"] = newValue;

イベントをトリガーするもの:

NotifyPropertyChanged("NewItem");

その結果、そのコレクションのすべてのアイテムをサブスクライブし、さまざまなイベント ハンドラーを持つことができます。

ありがとう。

4

2 に答える 2

2

説明から必要なのは、私 (および他の人) が と呼ぶものObservableDictionaryです。これは、Google が実装するためのいくつかの提案を提供します。.NET に組み込まれているそのようなクラスはありませんが、チュートリアルやサード パーティの実装がたくさんあります。

私がそう言う理由:

  • コレクションの内容が変更されたことを通知するための正しいインターフェイスはINotifyCollectionChangedではなくINotifyPropertyChangedです。アイテムを追加するか、 を呼び出すとCollection["NewItem"] = newValue、発生するイベントは です。変更されたのはリストのプロパティCollectionChangedではないためです。コンテンツです。
  • ObservableCollectionリストにキーと値のペアを含めることを明確に意図しているため、既存のクラスを簡単に使用することはできません。

これとは別に、「そのコレクションのすべてのアイテムをサブスクライブできるようになります」と言っていますが、これは、辞書の「値」を制限したいかもしれINotifyPropertyChangedないことを示唆していますがObservableDictionary、次に、ディクショナリ内の値を必要な任意の型にすることを選択できます。

于 2012-08-13T08:30:31.097 に答える
0

リストでなければならない場合は、使用します

ObservableCollection<INotifyPropertyChanged>
于 2012-08-13T08:16:33.590 に答える