3

BindingListにバインドされたDevExpressGridControlがあります。BindingListを使用して、変更がバインドされたコントロールに自動的に適用されるようにしました。

リストにアイテムを追加したり、リストからアイテムを削除したりすると完全に機能しますが、アイテムを変更しても、希望どおりに機能しなくなりません。

別のスレッドで実行されるforeachループを作成しました(UIスレッドを自由に更新できるようにするため)。このループは、BindingList内のすべてのオブジェクトを反復処理し、それらのプロパティの一部を変更します。

私が期待する方法は、各プロパティがGridControlの更新をリアルタイムで更新することです。ただし、更新は非常に「分厚い」ものです。一度に2行を更新する場合もあれば、GridControlをクリックして新しい値を取得する必要がある場合もあります。

なぜこれが起こるのですか?

DataControl.RefreshDataSource()各アイテムの後に呼び出すのは良い解決策ですか?

4

2 に答える 2

3

しかし、アイテムを変更しても、思い通りに動作しません。

アイテム内の変更は BindingList が気にするものではないため、アイテムは INotifyPropertyChanged を実装する必要があります。

基本的にバインディング リストは LIST がいつ変更されたかを示しますが、プロパティを更新する場合 (リストはどのように認識すべきか ;) そしてなぜそれを気にする必要があるか - すべてのアイテムは、そのインターフェイスを使用してそのプロパティへの更新を個別に発行する責任があります。

各アイテムの後に DataControl.RefreshDataSource() を呼び出すのは良い解決策ですか?

最悪の方法。項目が INotifyPropertyChange を実装していることを確認し、それに応じて PropertyChanged イベントを発生させます。

于 2012-04-14T16:24:47.823 に答える
1

のオブジェクトは、インターフェイスをBindingList実装し、プロパティの値が変更されたときにイベントを発生させる必要があります。INotifyPropertyChangedPropertyChanged

于 2012-04-14T16:01:51.320 に答える