【问题标题】:How to make a BindingSource aware of changes in its DataSource?如何让 BindingSource 知道其 DataSource 的变化?
【发布时间】:2017-01-26 05:07:30
【问题描述】:

我有一个:

someBindingSource.DataSource = someDataSource;

我也这样做:

someDataSource = foo();

foo() 对具有不同数据的另一个数据源执行 new

我认为每次数据源更改时都进行分配是不正确的,即:

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

那么有没有办法让someBindingSource 意识到someDataSource 的变化?

【问题讨论】:

  • 您不是在 someDataSource 中进行更改,而是替换整个对象,所以我认为如果不使用容器包装 someDataSource 并通过某种容器方法更改数据(采取看看 ObservableCollection)
  • 我将持有一个带有一项的 ObservableCollection?
  • 我认为关键是你必须包装你的 dataSource 对象并通过某种方法替换数据,如果你想替换数据源(而不是更新它)并且仍然通知你的 bindingSource

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


【解决方案1】:

如果数据源实现IBindingList 接口,则BindingSource 将被通知向数据源添加或删除项目。一个很好的实现是BindingList<T>

另外如果数据源的item实现了INotifyPropertyChanged,那么BindingSource也会被通知item的变化。

在上述情况下,ListChanged 事件将被引发。

注意

  1. 注意,如果你分配someBindingSource.DataSource = someThing;然后someThing = new SomeThing();,因为someBindingSource.DataSource是指向前一个对象,所以没有变化也不会有通知。
  2. DataSourceChanged 事件将在您为BindingSourceDataSource 分配新值后引发,因此在之前的情况下someThing = new SomeThing(); 之后,如果您执行someBindingSource.DataSource = someThing;,那么DataSourceChanged 将被引发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多