问题
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?
回答1:
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 thensomeThing = new SomeThing();, sincesomeBindingSource.DataSourceis pointing to previous object, there is no change and there would be no notifications. DataSourceChangedevent will be raised after you assign a new value toDataSourceof aBindingSource, so aftersomeThing = new SomeThing();in previous situation if you performsomeBindingSource.DataSource = someThing;then theDataSourceChangedwill be raised.
来源:https://stackoverflow.com/questions/39557420/how-to-make-a-bindingsource-aware-of-changes-in-its-datasource