0

WPFのコントロール間の通信を可能にする正しいメカニズムは何でしょうか。私の目標は、従来のイベントを使用せず、手動でそれらを接続する必要があることです。ルーティングされたコマンドのデフォルトの動作(トンネリング、バブリング)は正しい方向に沿っているように見えますが、何かが足りないと思います。

ルーティングされたイベントは、WPFによって提供される新しいインフラストラクチャであり、イベントがビジュアルツリーを下ってターゲット要素にトンネリングしたり、ルート要素にバブルアップしたりできるようにします。イベントが発生すると、途中で遭遇したそのイベントにサブスクライブされた要素で、そのイベントのハンドラーを呼び出すビジュアルツリーを上下に「移動」します。 このツリートラバーサルは、ビジュアルツリー全体をカバーするのではなく、祖先要素のみをカバーすることに注意してください。

これは、このWPF記事からのものです

記事の画像を使用して、「Immediate Element#1」でイベントを開始(発生)させてから、「Immediate Element#2」でそのイベントを処理するようにします。「ルート要素」にコードを入れずにこれを実現したいと思います。

基本的に、アプリのどこからでもイベント(保存、ステータスの更新、選択の変更など)を発生させ、2つのパーティがお互いについて何も知らない状態で別の場所で処理するようにします。これは可能ですか?

私はデータベイディングが答えだとは思わない。ルーティングされたイベント/コマンドは、ソース管理のブランチ内だけでなく、ツリー全体で設計されているため、使用したいと思います。ルーティングされたイベント/コマンドを使用して実行できない可能性があり、データバインディングがその答えです。わからない...

何か案は?

4

2 に答える 2

2

最良のメカニズムは、データビューをリファクタリングしてデータモデルから分離することです。

各データポイントに(標準のC#プロパティではなく)DependencyPropertyプロパティを提供するが、UIを提供しないデータモデルを作成します。データモデルの値は、変更すると相互に影響を与える可能性があります。

次に、各WPF要素をデータモデルの適切なDependencyPropertyにバインドできます。1つの要素の値を変更すると、バインドされたプロパティのデータモデルの変更を反映するように、他のすべての要素が更新されます。

于 2008-10-08T19:10:05.850 に答える
1

要素間でデータを転送したい場合Bindingは、行く方法です。これに関する多くのチュートリアルや書籍がネット上にあります。

Style変更を有効にしたい場合はDataTriggers、バインディングも使用する を使用できます。

共通のルートに接続せずに、関連のないコントロール間で従来の意味でイベントを送信する方法はありません。

于 2008-10-08T18:58:04.283 に答える