私は典型的なキャッチ22の問題であるに違いないものを持っています。テキストボックスとチェックボックスを含む.NETWinFormコントロールがあります。両方のコントロールは、データクラスインスタンスのプロパティにバインドされたデータです。テキストボックスは価格用で、チェックボックスは価格が価格オーバーライドであることを示します。また、データクラスには、アイテムの元の価格を保持するプロパティがあります。
コントロールが次のルールを尊重するようにしたいと思います。
- ユーザーが価格テキストボックスに値を入力すると、チェックボックスが自動的にオンになり、価格値を上書きしていることを示します。
- チェックボックスをオフにすると、アイテムの価格が元の価格に戻ります。
ユーザーがチェックボックスをオフにすると、イベントハンドラーはチェックされた状態をテストし、アイテムの価格プロパティを元の価格値に設定します。ただし、価格値がデータバインドされている場合、バインドイベントが発生し、テキストボックスの値が更新されます。これにより、テキスト変更イベントハンドラーが発生し、チェックボックスが再度オンになります。
コントロール変更イベントをトリガーする何かを明示的に更新している条件をトラップしようとしました。ただし、これはその一部でのみ機能します。テキストボックスの変更イベントは、フォームが最初に表示されたときにデータバインディングが発生した場合など、自分で制御できない他の時間に発生します。
私は周りを検索してきましたが、探しているものを見つけるための適切な検索用語を思い付いていないだけだと思います。データバインディングは、2つのバインドされたコントロールを相互に作用させるなど、何か実用的なことをする必要があるまでは、すべて素晴らしくて気の利いたようです。何が制御イベントをトリガーしたかを区別する方法がないようです。
バインディングソースコンポーネントで利用可能なイベントも調べましたが、これ以上役立つものはないようです。バインドが完了した後に発生するイベントを処理できますが、それは問題が発生した後です。
誰か提案がありますか?