如何让BindingSource知道其DataSource中的更改?

时间:2016-09-18 12:00:22

标签: c# .net winforms data-binding bindingsource

我有一个:

someBindingSource.DataSource = someDataSource;

我也这样做:

someDataSource = foo();
对于具有不同数据的其他数据源,

foo()new

每次数据源发生变化时,我都不认为这是正确的,即:

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

那么有没有办法让someBindingSource了解someDataSource中的变化?

1 个答案:

答案 0 :(得分:2)

如果数据源实现IBindingList接口,则会通知BindingSource向数据源添加或删除项目。要使用的良好实现是BindingList<T>

此外,如果数据源的项目实施INotifyPropertyChanged,则BindingSource也会收到有关项目更改的通知。

在上述情况下,ListChanged事件将被提升。

注意

  1. 请注意,如果您指定someBindingSource.DataSource = someThing;然后再指定someThing = new SomeThing();,因为someBindingSource.DataSource指向上一个对象,所以没有任何更改,也没有通知。
  2. 在为DataSourceChanged的{​​{1}}分配新值后,系统会引发
  3. DataSource事件,因此,如果您执行BindingSource,则在之前情况someThing = new SomeThing();之后那么someBindingSource.DataSource = someThing;将会被提升。