2011-09-11 28 views
8

DataSource(単純なBindingList)から項目を追加または削除するときには、それに応じてComboBoxが更新されますが、このような項目を編集すると自動的には更新されません:データソースの変更時にComboBoxが自動的に更新されませんか?

myBindingList[index].Name = "NewName"; 
myBindingList[index].Value = newValue; 

アイテムを作成または削除するのとは対照的に、アイテムを編集すると更新されます。変更が行われた後、これを行う必要があります。

myComboBox.DataSource = null; 
myComboBox.DataSource = myBindingList; 

これで問題は解決しましたが、また、大きなリストでは、遅くなることがあります(私が知っている時期尚早の最適化)が、ComboBoxを強制的に更新してデータソースを完全に再割り当てせずに強制的に更新する方法はありますか?

お読みいただきありがとうございます。

答えて

6

これは、MSDNフォーラムに記載されています

IBindingListインターフェイスは、それに割り当てられた基礎となるデータソース が言ったインタフェースを実装している場合コンボボックスなどのコントロールが にフックアップListChangedイベントが含まれています。あなたのデータソースが の場合、適切なListChangeEventArgsで対応するListChangedを発生させる必要があります。 あなたのIBindingListの実装者を追加、削除、変更する場合などです。 この方法では、 コンボボックスにバインドする元のソースが変更されると、対応するUIコントロール(コンボボックス)が に更新されます。

あなたはBindingListを使用していると言いますが、実際にはアイテムイベントの追加または削除を反映するためにコンボボックスが表示されます。適切なBindingListイベントが発生していないように見えるため、別の方法でBindingList内のアイテムの更新を行うべきだと思います。

あなたはそれを調査するか、単にリセットしてデータソースを再割り当てすることができますが、私はあまりにも悪いとは思わない、あなたはStatefull Windows Formsアプリケーションであり、SatetLess Webformsではなく、 :)あなたが観察コレクションとIPropertyChange実装必要

関連する問題