2016-09-18 7 views
2

私が持っている:BindingSourceにDataSourceの変更を認識させる方法を教えてください。

someBindingSource.DataSource = someDataSource; 

そして私も行います

someDataSource = foo(); 

foo()は異なるデータと他のデータソースのnewを行います。

は、私はそれが割り当てを毎回行うために、正しいだとは思わないデータソースの変更、すなわち:

someDataSource = foo(); 
someBindingSource.DataSource = someDataSource; 

のでsomeDataSourceの変化のsomeBindingSourceに認識させるための方法がありますか?

+0

someDataSourceを変更するのではなく、オブジェクト全体を置き換えているので、someDataSourceをコンテナでラップしたり、いくつかのコンテナメソッドを使ってデータを変更したりする必要はありません。ObservableCollection ) – barakcaf

+0

1つのアイテムでObservableCollectionを保持しますか? – shinzou

+0

データソースを(更新するのではなく)置き換えて、バインディングソースに通知する場合は、dataSourceオブジェクトをラップして何らかの方法でデータを置き換える必要があると思います – barakcaf

答えて

2

データソースがIBindingListインテフェイスを実装する場合は、BindingSourceにデータソースへのアイテムの追加または削除が通知されます。使用するための良い実装はBindingList<T>です。

また、データソースのアイテムにINotifyPropertyChangedが実装されている場合、BindingSourceにもアイテムの変更が通知されます。

上記の場合ListChangedイベントが発生します。

  1. 注意を払う、someBindingSource.DataSourceは前のオブジェクトを指しているので、あなたは、someBindingSource.DataSource = someThing;を割り当て、someThing = new SomeThing();場合は、変更がないと何の通知もないでしょう。
  2. DataSourceChangedイベントは、あなたがBindingSourceDataSourceに新しい値を代入した後に発生しますので、あなたはsomeBindingSource.DataSource = someThing;を実行した場合、以前の状況でsomeThing = new SomeThing();た後、その後DataSourceChangedが発生します。
関連する問題