この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
ObservableCollection<T> クラスは、項目が追加または削除されたとき、またはリスト全体が更新されたときに通知を提供する動的データ コレクションを表します。
多くの場合、使用するデータはオブジェクトのコレクションです。 たとえば、データ バインディングの一般的なシナリオは、ItemsControl、ListBox、ListViewなどのTreeViewを使用してレコードのコレクションを表示することです。
IEnumerable インターフェイスを実装する任意のコレクションを列挙できます。 ただし、コレクション内の挿入または削除によって UI が自動的に更新されるように動的バインディングを設定するには、コレクションで INotifyCollectionChanged インターフェイスを実装する必要があります。 このインターフェイスは、基になるコレクションが変更されるたびに発生する必要があるイベントである CollectionChanged イベントを公開します。
ObservableCollection<T> クラスは、INotifyCollectionChanged インターフェイスを実装するデータ コレクション型です。
独自のコレクションを実装する前に、ObservableCollection<T>、List<T>、Collection<T>など、BindingList<T>または既存のコレクション クラスの 1 つを使用することを検討してください。 高度なシナリオがあり、独自のコレクションを実装する場合は、インデックスによって個別にアクセスできるオブジェクトの非ジェネリック コレクションを提供する IListの使用を検討してください。 IListを実装すると、データ バインディング エンジンで最高のパフォーマンスが得られます。
注
バインディング ソース オブジェクトからバインディング ターゲットへのデータ値の転送を完全にサポートするには、バインド可能なプロパティをサポートするコレクション内の各オブジェクトに、 INotifyPropertyChanged インターフェイスなどの適切なプロパティ変更通知メカニズムを実装する必要があります。
詳細については、「データ バインディングの概要」の「コレクションへの バインド」を参照してください。
XAML の使用に関する注意事項
ObservableCollection<T> は、Windows Presentation Foundation (WPF) バージョン 3.0 および 3.5 の XAML オブジェクト要素として使用できます。 ただし、使用には大きな制限があります。
ObservableCollection<T>はルート要素である必要があります。ジェネリック
x:TypeArguments
の制約付き型を指定するために使用する必要があるObservableCollection<T>属性は、ルート要素のオブジェクト要素でのみサポートされるためです。x:Class
属性を宣言する必要があります (この XAML ファイルのビルド アクションは、Page
または XAML をコンパイルするその他のビルド アクションである必要があります)。ObservableCollection<T> は、最初は既定の XML 名前空間にマップされていない名前空間とアセンブリ内にあります。 名前空間とアセンブリのプレフィックスをマップし、そのプレフィックスを ObservableCollection<T>のオブジェクト要素タグで使用する必要があります。
アプリケーションで XAML の ObservableCollection<T> 機能を使用するより簡単な方法は、 ObservableCollection<T>から派生し、それを特定の型に制限する独自の非ジェネリック カスタム コレクション クラスを宣言することです。 次に、このクラスを含むアセンブリをマップし、XAML でオブジェクト要素として参照します。
.NET