Eingabebindungen innerhalb eines Stils definieren

Ich erstelle eine WPF-App mit dem MVVM-Entwurfsmuster und versuche, das TabItem-Steuerelement so zu erweitern, dass es die Registerkarte schließt, wenn der Benutzer mit der mittleren Maustaste klickt. Ich versuche dies mit InputBindings zu erreichen und es funktioniert sehr gut, bis ich versuche, es innerhalb eines Stils zu definieren. Ich habe erfahren, dass Sie einem Stil keine InputBindings hinzufügen können, wenn Sie ihn nicht mithilfe einer DependencyProperty anhängen. Also folgte ich diesem ähnlichen BeitragHier.. und es funktioniert ... fast. Ich kann einen Tab mit der mittleren Maustaste schließen, aber es funktioniert auf keinem der anderen Tabs (alle Tabs werden zur Laufzeit hinzugefügt und übernehmen denselben Stil).

So brauche ich etwas Hilfe. Warum sollte das nur beim ersten Mal funktionieren und nicht danach? Natürlich könnte ich ein benutzerdefiniertes Steuerelement erstellen, das von einem TabItem erbt, und es funktionieren lassen, aber ich möchte dies herausfinden, da ich sehe, dass dies in meinen Projekten erweitert wird. Ich bin kein Experte für DependencyProperties, also helfen Sie mir bitte. Vielen Dank

Stil

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

Klass

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);
    }
}