私は、別のクラス 'MyData'のプロパティにバインドされたテキストボックスを持つウィンドウフォーム 'MyForm'を持っています。データソース更新モードが「プロパティ変更時」に設定されている別のクラスのプロパティにバインドされたテキストフィールドは更新されません
私はVisualStudio IDEを使用しました。これは後に初期化値コードがINotifyPropertyインタフェースが実装された
myDataClassInstantiated = new MyDataClass();
BindingSourceMyDataClass.DataSource = myDataClassInstantiated;
形にのMyDataクラスを結合するために加え、フォームコンストラクタで結合
this.txtYield.DataBindings.Add(new Binding("Text", this.BindingSourceMyDataClass, "PropertyInMyDataClass", true, DataSourceUpdateMode.OnPropertyChanged));
ために、次のコードを作成した:
public double PropertyInMyDataClass
{
get { return _PropertyInMyDataClass; }
set
{
if (!Equals(_PropertyInMyDataClass, value))
{
_PropertyInMyDataClass = value;
FirePropertyChanged("PropertyInMyDataClass");
}
}
}
バックグラウンドワーカーを使用して計算を実行し、 'PropertyInMyDataClass'プロパティを更新します。
バックグラウンドワーカーが完了すると、フォームのテキストボックスが自動的に更新されることが予想されました。私は手動でフォームのテキストボックスにプロパティから値を割り当てるコピーする場合それは
を実現しなかった、値が正しく表示され
this.txtYield.Text = String.Format("{0:F0}", myDataClassInstantiated.PropertyInMyDataClass);
は私がにリフレッシュ()とupdate()を追加しようとしましたMyForm.MyBackgroundWorker_RunWorkerCompletedメソッドが、データはまだ更新されません。私は後で同じフォーム上の別のテキストボックスを更新異なるバックグラウンドワーカーを実行する場合
は、PropertyInMyDataClassにバインドされたテキストボックスは、私が理解し、このデータバインディングの問題を解決するために私を助ける提案をいただければ幸いです
に更新されます
Thanks @David C. Iこのフォームに約15フィールドの更新が必要で、UIスレッドでBackgroundWorkker_RunWorkerCompletedが呼び出されるまで待つことができます。あなたのコードはこれに対処する適切な方法です。バックグラウンドワーカーがフィールドの更新を完了するまで待つことができれば、リフレッシュを開始する方法がありますか? – DarwinIcesurfer
@Darwinバックグラウンドワーカーへの呼び出しをどのように構造化し、データオブジェクトにデータを取り込みますか?データオブジェクトは静的であるか、それとも類似していますか? –
データオブジェクトは静的ではありませんが、バックグラウンドワーカープロセスが終了するまでデータは有効ではありません。クラスには計算に使用される多数の入力プロパティがあり、計算が終了した後にフォーム上で更新する必要がある多数の結果があります。おそらくデータバインディングが原因で私はそれが修正されるより多くの問題を引き起こしています。 – DarwinIcesurfer