2011-10-14 15 views
0

私はビュー内のTabControlのTabItemにユーザーコントロールを持っているシナリオを持っています。これらのユーザコントロールは、ViewModel内の個別のオブジェクトに個別にバインドされています。私が必要とするのは、バインドされたオブジェクト(親TabItemのIsSelectedプロパティ値)にこれらのコントロールを渡すことです。バインディングを親要素から子要素のデータコンテキストにリレーする方法はありますか?

この種のリレーバインディングを行う方法についてのアイデアはありますか?

答えて

1

ParentViewModelは、IsSelected個の値をトラッキングするのではなく、TabControlのSelectedIndexを追跡してみませんか?

これでうまくいかない場合は、通常、Microsoft PRISMのEventAggregatorまたはMVVM LightのMessengerのようなものを使用して、他の関心のあるViewModelsにメッセージをブロードキャストします。

SelectedIndexParentViewModelにバインドしていますが、いつでもその変更がSelectedTabChangedというメッセージをブロードキャストします。そのような情報に関心のある個々の子ViewModelは、これらのメッセージをサブスクライブし、選択したタブが所属するものであれば、必要なロジックを実行します。

+0

私はSelectedIndexを持っていますが、究極の必要性は、特定のコントロールとそれに基づくバインドされたオブジェクトが現在選択されているタブ上にあることを知っていることです。現在のユーザーが表示できるコントロール、つまり選択したタブにあるコントロールにバインドされているオブジェクトのみに処理をプルーニングできるように、ビューモデルの情報を追加します。 – Jim

+0

@Jim通常は、私のParentViewModelに 'ObservableCollection Tabs'を保持していますので、' SelectedTab'はintではなくオブジェクトです。そして、私が 'ChangeTabEvent'を公開すると、選択したタブをパラメータとして渡すことができます。そのイベントに登録するタブは、それらがパラメータと等しいかどうかを確認できます。そうであれば、それらが選択されます。もう一つの選択肢は、あなたの子ビューモデルに 'IsSelected'プロパティを設定し、' SelectedTabIndex'がいつでも変更される 'ParentViewModel'を設定することです。 – Rachel

+0

@Jimをサイドノートとして、デフォルトでWPF TabControlの各TabItemはアンロードされますそれは見えません。したがって、TabItemのコンテンツのLoaded/Unloadedイベントにフックし、DataContextの 'IsSelected'プロパティを設定することもできます。 – Rachel

関連する問題