Definindo InputBindings dentro de um estilo

Estou criando um aplicativo WPF usando o padrão de design MVVM e estou tentando estender o controle TabItem para que ele feche a guia quando o usuário clicar no botão do meio do mouse. Estou tentando conseguir isso usando InputBindings, e funciona muito bem até tentar defini-lo dentro de um estilo. Aprendi que você não pode adicionar InputBindings a um estilo, a menos que você o anexe usando um DependencyProperty. Então eu segui esse post semelhanteaqui... e funciona ... quase. Posso fechar uma guia usando o botão do meio do mouse, mas não funcionará em nenhuma das outras guias (todas as guias são adicionadas em tempo de execução e herdam o mesmo estilo).

Então eu preciso de ajuda. Por que isso funcionaria apenas na primeira vez, e não depois? Obviamente, eu poderia criar um controle personalizado que herda de um TabItem e fazê-lo funcionar, mas gostaria de descobrir isso, pois posso ver isso sendo expandido em meus projetos. Eu não sou especialista em DependencyProperties, então por favor me ajude. Obrigado!

Estilo:

<Style TargetType="{x:Type TabItem}">
    <Setter Property="w:Attach.InputBindings">
        <Setter.Value>
            <InputBindingCollection>
                <MouseBinding MouseAction="MiddleClick" 
                              Command="{Binding CloseCommand}"/>
            </InputBindingCollection>
        </Setter.Value>
    </Setter>
    ...
</Style>

Classe

public class Attach
{
    public static readonly DependencyProperty InputBindingsProperty =
        DependencyProperty.RegisterAttached("InputBindings", typeof(InputBindingCollection), typeof(Attach),
        new FrameworkPropertyMetadata(new InputBindingCollection(),
        (sender, e) =>
        {
            var element = sender as UIElement;
            if (element == null) return;
            element.InputBindings.Clear();
            element.InputBindings.AddRange((InputBindingCollection)e.NewValue);
        }));

    public static InputBindingCollection GetInputBindings(UIElement element)
    {
        return (InputBindingCollection)element.GetValue(InputBindingsProperty);
    }

    public static void SetInputBindings(UIElement element, InputBindingCollection inputBindings)
    {
        element.SetValue(InputBindingsProperty, inputBindings);
    }
}