これは設計上の問題です。
ビジネス オブジェクトをさまざまな方法で表示するツールを構築しています (つまり、ツリー ノード、リスト ビュー アイテム、コンボ ボックス、テキスト フィールドなど)。ユーザーがそれらのいずれかを変更するたびに、そのビジネス オブジェクトが変更されたか、それが属するコレクションが変更されたことを通知するイベントが発生します。このビジネス オブジェクト、またはそれが属する可能性のあるコレクションは、複数の場所に表示される可能性があるため、これらの UI 要素のそれぞれを更新して、この変更を反映する必要があります。変更が発生した場合に各タイプの UI 要素を正しく更新するエレガントなソリューションはありますか?
これを行う方法についていくつかのアイデアがありますが、誰かがこの問題を抱えていて、解決策に満足しているかどうかを確認したいと思います. これは C# の WinForm ですが、ソリューションはどの言語でもかまいません。
問題と可能な解決策に関する私の現在の考え:
ビジネス オブジェクトが TreeNodeCollection/ListViewITemCollection/ComboBoxItemCollection の一部になり、コレクションで Clear() が呼び出されたときに、イベント バインディングをクリーンアップする場合 (つまり、businessObject.Changed -= ObjectChanged) はさらに複雑になります。
「サービス」では、各オブジェクトとその UI 要素を登録でき、ビジネス オブジェクトのイベントを 1 か所でリッスンでき、イベントが発生すると各 UI 要素が更新されます。すべての UI 要素が登録解除されると、そのオブジェクトのイベントへのサブスクリプションが削除されます。
このソリューションの問題点は、すべてのコントロールが作成ごとに UI コンポーネントとオブジェクトを登録する必要があることです。これは面倒です。
あなたの考え?