すべてのテキスト ボックスが、 INotifyPropertyChanged を実装する同じデータ オブジェクトの異なるプロパティにバインドされているフォームがあります。form.ValidateChildren()を呼び出して明示的に検証をトリガーしたいので、フォームのAutovalidateは「無効」に設定されています。
予想: ValidateChildren を呼び出した後、編集されたすべての値がデータ オブジェクトに含まれている必要があります。
問題: 最後にフォーカスされたコントロールのみがそのデータをデータオブジェクトに書き込みますが、他のすべてのコントロールは編集された値を失い、代わりに古い値を表示します。
質問: コントロールが更新される前に、すべてのデータが検証されていることを確認するにはどうすればよいですか?
Autovalidate = EnablePreventFocusChange または EnableAllowFocusChange を使用しても機能しますが、すべてを一度に検証したいので、それは私にとって受け入れられる解決策ではありません。
インターネットで解決策を検索すると、同じ問題を示す例が見つかりましたが、残念ながら解決策はありません。
編集 さらに調査した後、私はこれを試しましたが、動作します:
form.BindingContext[dataobject].SuspendBinding();
form.ValidateChildren();
form.BindingContext[dataobject].ResumeBinding();
バインディングの一時停止は標準的な方法ですか、それともこれを修正するためのより良い解決策はありますか?