ContextMenu を設定している TabControl があります。
すべての ContextMenu 要素にはコマンド セットがあります。
<ContextMenu x:Key="tabMenu">
<MenuItem Command="{x:Static tabs:TabCommands.Close}" />
<MenuItem Command="{x:Static tabs:TabCommands.CloseAllButThis}" />
<MenuItem Command="{x:Static tabs:TabCommands.CloseAll}" />
</ContextMenu>
すべてのコマンドがルーティングされ、CommandBindings は TabControl の数レベル上で定義されます。
問題は、CommandBinding の CanExecute/Execute イベント ハンドラーで、どの TabItem でメニューが呼び出されたかを確認する正しい方法はどれかということです。正しいとは、TabItem テンプレートのようなものを変更しても壊れないものを意味します。
または、アプローチ全体が間違っている可能性があり、これにはルーティングされたコマンドを使用しないでください。私は元々、ホットキーを必要とする [新しいタブの追加] コマンドにルーティングを使用していました。
前もって感謝します。
更新:
Igor のソリューションはアーキテクチャーの POV よりもきれいですが (ViewModel で _ を削除することを除いて)、TabControl がバインドされているものから独立した再利用可能な Close コマンドが必要です (タブの Close/Close All はあらゆる種類のアプリケーションに存在するため)。特定のモデルに意味的にリンクされていません)。
また、カスタム テンプレートが既にあるため、カスタム DataTemplate を使用できません。それをサブクラス化すると、ソリューションが少し複雑になります。