ローカルデータベースからデータを読み取り、リストボックスに表示するアプリケーションを作成しています(WPFで作業しています)。
私はDVDオブジェクトを持っており、そのプロパティはデータベースの列です。このDVDオブジェクトは、INotifyPropertyChangedも実装します。「MyDVDs」はdbを参照するテーブルです。これらのオブジェクトを作成したら、ObservableCollectionを継承し、コンストラクターの「MyDVDs」からデータを取得するクラスを作成します。ただし、リストボックスからデータを追加、削除、更新するだけでなく、データを並べ替えてフィルタリングする必要もあります。ObservableCollectionのコードは次のとおりです。
class ObservableDVD : ObservableCollection<DVD>
{
private ICollectionView collection;
public ObservableDVD(MyDVDs e)
{
foreach (DVD d in e.DVDs)
{
this.Add(d);
}
Collection = CollectionViewSource.GetDefaultView(this);
}
public ICollectionView Collection
{
get { return collection; }
private set { collection = value; }
}
}
知りたかったのですが、これはいい方法ですか?それとも私はもっとうまくやることができますか?
プロジェクトのメインウィンドウで、Load_Windowイベントが発生したときに、Collectionプロパティをlistbox.ItemSourceに割り当てます(メインウィンドウのコードビハインドで、明らかにObservableDVDオブジェクトを参照するプライベートフィールドを宣言します)。前に説明した操作を実行できるボタンがいくつかあります。ボタンのイベントヘッドラーでは、プロパティコレクションではなく、ObservableDVDオブジェクトを直接更新および変更します。ただし、Collectionプロパティにはこれらの変更も反映されます。
なぜこの動作が発生するのですか?私にとっては大丈夫ですが、なぜそれが起こるのか理解できません。通知のせいですか?