以下に示すモックアップに似た WPF/prism アプリケーションがあります。
両方の TabControl には個別の Prism 領域が含まれており、2 番目の領域は最初の領域にネストされています。ツールバーは、現在アクティブなビューに応じてアイテムをアクティブ化/非アクティブ化する必要があります。
ツールバーは現在、シェルで定義されています。
各ViewModelがサポートするツールバーコマンドを登録できる、ある種のレジストリを使用してみました。ただし、ツールバーはどのビュー(したがってどのビューモデル)がアクティブかを認識できないことに気付きました。
問題はネスティングにあります。それがなければ、TabControl.SelectedItem プロパティをツールバーにバインドし、上からレジストリを使用することで、おそらく目的を達成できます。
多分これを行うためのより良い方法がありますか?または、アクティブなビューをツールバーに認識させる方法はありますか?
編集:この記事で説明されているように、ActiveAware ViewModels を使用しようとしました: http://www.codeproject.com/Articles/56826/ViewModel-Active-Awareness-in-a-Prism-Based-Applic、しかし、私は今持っていますTab "One" から Tab "Two" に切り替えて元に戻すと、ネストされたタブの "First Tab" GotFocus イベントが発生しないという問題が発生しました。つまり、ツールバーが間違ったビューを表すことになります。
多分これは行く方法ですか?
編集 2:問題は、2 番目のタブコントロールが独自のスコープ領域内にないことです。ViewDiscovery アプローチを使用してリージョンにビューを追加しているため、スコープ内にリージョン マネージャーを明示的に作成していません。ビューを切り替えると最初のタブコントロールのビューモデルが正しく更新されるため、SyncActiveState はスコープ領域でのみ機能するようです。
XAML を使用して、通常の領域の代わりにスコープ領域を作成する方法はありますか?