I have a:
someBindingSource.DataSource = someDataSource;
And I also do:
someDataSource = foo();
foo()
does new
for another data source with different data.
I don't think it's correct to do the assignment every time the data source changes, i.e:
someDataSource = foo();
someBindingSource.DataSource = someDataSource;
so is there a way to make someBindingSource
aware of change in someDataSource
?
If the data source implements IBindingList
inteface, then the BindingSource
will be informed of adding or removing items to the data source. A good implementation to use is BindingList<T>
.
Also if the items of the data source implement INotifyPropertyChanged
, then the BindingSource
also will be notified of changes on items.
In above cases ListChanged
event will be raised.
Note
- Pay attention, If you assign
someBindingSource.DataSource = someThing;
and then someThing = new SomeThing();
, since someBindingSource.DataSource
is pointing to previous object, there is no change and there would be no notifications.
DataSourceChanged
event will be raised after you assign a new value to DataSource
of a BindingSource
, so after someThing = new SomeThing();
in previous situation if you perform someBindingSource.DataSource = someThing;
then the DataSourceChanged
will be raised.