У меня есть TabControl, на котором я устанавливаю ContextMenu.
Все элементы 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>
Все команды маршрутизируются, а привязки команд определяются на несколько уровней выше TabControl.
Таким образом, вопрос заключается в следующем: в обработчиках событий CommandBinding CanExecute / Execute, как правильно узнать, для какого TabItem было вызвано меню? Под правильным я подразумеваю тот, который не сломался бы, если бы я изменил что-то вроде шаблона TabItem.
Или, может быть, весь подход неверен, и я не должен использовать для этого маршрутизируемые команды? Первоначально я использовал маршрутизацию для команды Add New Tab, для которой требуются горячие клавиши.
Заранее спасибо.
UPDATE
Решение Игоря чище от архитектурного POV (за исключением того, что я бы удалил _ в ViewModel), но я хочу иметь многоразовую команду Close, которая не зависит от того, к чему привязан TabControl (так как Close / Close All для вкладок существует во всех виды приложений и не семантически связаны с конкретной моделью).
Кроме того, я не могу использовать собственный DataTemplate, так как у меня уже есть собственный шаблон, и создание его подкласса сделало бы решение немного более сложным.