0

参考: コンボボックスのC#データバインディング

私も似たような状況です。テキスト ボックス、コンボ ボックス、チェック ボックスが少ないフォームがあります。最初に、「変更された」イベント (text_changed、selected_index_changed など) をキャッチし、UI データをバッキング オブジェクトと同期するために使用します。Databinding について学び、すべての UI 要素をバッキング オブジェクトにバインドしました。

問題: UI の状態に基づいて、バッキング オブジェクトを使用してコンテンツに保存する [送信] ボタンを有効または無効にしていました。しかし現在、DataBinding により、バッキング オブジェクトのプロパティは、それにバインドされたコントロールが適切にフォーカスを失っていない限り変更されません。

質問 この問題を解決する標準的な方法はありますか? それとも、「変更された」イベントをキャッチしてバッキングオブジェクトの値を設定する必要がありますか?

また、フォームをフォールト トレラントにするために、バッキング オブジェクトを N 秒ごとに保存します。しかし、DataBinding を使用すると (フォーカスされているコントロールがまだその値をバッキング オブジェクトに設定していない場合)、間違ったデータを保存することになります。

私が試したこと Evey N seconds call this.validate() -> これは、実際にはフォーカス時にコントロールに古いデータを入力するため、機能しません。

- - - ノート - - -

バッキング オブジェクトは INotifyPropertyChanged インターフェイスを実装します。

これは、(デザイナーではなく)コードでバインドする方法です。

Binding binding = new Binding("checked", solution, "InternalFlag"); checkBoxFlag.DataBindings.Add(バインディング);

4

1 に答える 1

1

バックエンドオブジェクトをいつフォーカスを失った状態から値が変更された状態に更新するかを記述するバインディングのプロパティを変更する必要があります

データ ソース更新モード

binding = new Binding("checked", solution, "InternalFlag", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
于 2011-10-11T18:03:16.513 に答える