私のクラスには public List フィールドがあります。誰かがこのコレクションをいつ変更したかを検出したい。ただし、このコレクションに独自の Add/Remove ラッパーを作成するのは無駄に思えます。デリゲートなどでコレクションの変更に関する通知を受け取る方法はありますか?
3 に答える
代わりにこちらObservableCollection<T>
を参照してください。
あなたが説明したコレクションは既に存在し、その名前はObservableCollection
です。
イベントがCollectionChanged
あるので、そこでイベントハンドラーをサブスクライブするだけで、アイテムがコレクションに追加または削除されるたびに呼び出されます..
BindingList<T>
代わりに使用してください。ListChanged
イベントを提供しています。またDataSource
、Listbox や Grid などの多くのコントロールと同様に受け入れられます。
この回答で述べたようにBindingList
、より多くのものを提供していますObservableCollection
リストボックス内のリストを変更し、そのリストへの変更が UI に反映されるようにする場合はBindingList<>
、リストボックスにデータソースとして設定し、リストを操作するだけです。リストボックスはイベントを処理し、ListChanged
自分で手動で行う必要なく変更を表示します。
Winforms で使用する場合は BindingList を使用し、WPF アプリで使用する場合は ObservableCollection を使用してください。