2016-09-18 42 views
2

我有一個:如何使BindingSource知道其DataSource中的更改?

someBindingSource.DataSource = someDataSource; 

而且我也做到:

someDataSource = foo(); 

foo()確實new與不同的數據的另一個數據源。

我不認爲這是正確的,每次做任務的數據源的變化,即:

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

那麼有沒有一種方法,使someBindingSourcesomeDataSource認識的變化?

+0

你不是在someDataSource中進行更改,而是替換整個對象,所以我不認爲沒有用容器包裝someDataSource並通過一些容器方法更改數據就可能實現(請看ObservableCollection ) – barakcaf

+0

我會舉行一個ObservableCollection項目? – shinzou

+0

我認爲重點是你必須包裝你的dataSource對象,並通過某種方法替換數據,如果你想替換數據源(而不是更新它),並且仍然通知你的bindingSource – barakcaf

回答

2

如果數據源實現了IBindingList接口,則會通知BindingSource向數據源添加或刪除項目。一個好的實現是使用BindingList<T>

此外,如果數據源的項目執行INotifyPropertyChanged,那麼BindingSource也會通知項目的變化。

在上述情況下ListChanged事件將會發生。

注意

  1. 注意的是,如果分配someBindingSource.DataSource = someThing;然後someThing = new SomeThing();,因爲someBindingSource.DataSource指向一個對象,沒有變化就沒有通知。您分配一個新值BindingSourceDataSource
  2. DataSourceChanged事件將提高,所以在以往的情況來看someThing = new SomeThing();後,如果執行someBindingSource.DataSource = someThing;那麼DataSourceChanged將提高。
相關問題