0

私は WPF アプリを開発しており、親のイベントを要素ツリー内のいくつかの子に通知して、それぞれがそれに応じてアクションを実行できるようにしたいと考えています。カスタムRoutedEventを使用して、イベントを上向きにバブリングすることにより、子からその祖先の1つに逆方向に通知できるため、祖先要素のいずれかがイベントを処理できることを知っています。私が望むのは、親のイベントについて子供に通知し、適切に処理することです。これを達成するための最良の戦略は何ですか?

編集:

コメントを明確にする: 私には親がいるとしましょうUserControl。がありTabControl、その内容はいくつかのネストされた子UserControlです。TabControl.SelectionChanged()ここで、イベントによって各 child に何らかの変更が加えられるようにするシナリオを考えてみましょうUserControl。これを達成する方法は?(各タブの内容は、UserControlそれ自体にさらにいくつかのレベルの子が含まれている可能性がありますUserControlUserControl一番下のレベルで、イベントについて知り、SelectionChanged()それに応じて応答する必要があります)。

4

4 に答える 4

0

データバインディングまたはトリガーを実行して、Ancestor TabControl.SelectedItem changed をリッスンできます。

于 2013-10-31T09:05:51.927 に答える
0

要件を実装する方法はいくつかあります。親ビュー モデルに子ビュー モデルのインスタンスがある場合は、単純にそれらのメソッドを呼び出すことができます。

親ビュー モデル:

childViewModel.UpdateStatus(someDataObject);
otherChildViewModel.UpdateStatus(someDataObject);

よりイベント駆動型のシステムが必要な場合は、delegatesを使用できます。

public delegate void Update(object someDataObject);

そのタイプのプロパティを親ビュー モデルに追加します。

public Update OnUpdate { get; set; }

親ビュー モデルの各子ビューにハンドラーをアタッチします。

OnUpdate += childViewModel.OnUpdateHandler;
OnUpdate += otherChildViewModel.OnUpdateHandler;

delegate次に、親ビュー モデルから を呼び出します。

if (OnUpdate != null) OnUpdate(someDataObject);

親ビュー モデルが子ビュー モデル オブジェクトにアクセスできない場合は、子ビューにプロパティを追加Bindてから、親ビュー モデルから子ビューにプロパティを追加できます。

<YourXmlNamespace:ChildView UpdateValue="{Binding DataContext.SomeDataObjectProperty, 
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type 
    YourXmlNamespace:ParentView}}}" />
于 2013-10-31T09:40:47.737 に答える
0

このサンプルが役立つと思います: http://akashsoni7.blogspot.com/2012/12/c-notify-parent-from-child-using-events.html

于 2013-10-31T11:33:39.440 に答える