ContextMenu Binding zu Übergeordnetem Button

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von kaifreeman.

    ContextMenu Binding zu Übergeordnetem Button

    Mahlzeit,

    ich habe hier ein kleines Problem mit einem Binding. Ich versuche ein Kontextmenü in einem Style zu definieren und das Command des "Elternteils" zu binden und mit einem CommandParameter aufzurufen. Irgendwie gelingt es mir, aber immer nur dann wenn ich nach dem Start des Programms im XAML noch was umschreiben, es scheint fast so als würde das Binding nicht funktionieren.
    Anmerkung: Mit PlacementTarget kann ich auf mein Viewmodel zugreifen, also quasi die Ebene über der Ebene wo ich hinwill funktioniert aber eben nicht die direkte Ebene darüber:

    Code:

    Der Style:

    XML-Quellcode

    1. <Style x:Key="RibbonButtonWithMenu" TargetType="{x:Type Fluent:Button}" BasedOn="{StaticResource {x:Type Fluent:Button}}">
    2. <Setter Property="ContextMenu">
    3. <Setter.Value>
    4. <Fluent:ContextMenu>
    5. <Fluent:MenuItem Header="{lex:Loc Key=new_window}"
    6. Command="{Binding Command, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Fluent:Button},UpdateSourceTrigger=PropertyChanged, BindsDirectlyToSource=True}"
    7. CommandParameter="True"
    8. Icon="{StaticResource NewWindow}"/>
    9. </Fluent:ContextMenu>
    10. </Setter.Value>
    11. </Setter>
    12. </Style>


    Der Button mit dem Style:

    XML-Quellcode

    1. <Fluent:Button Style="{StaticResource RibbonButtonWithMenu}" Header="{lex:Loc Key=contacts}" HorizontalAlignment="Center" VerticalAlignment="center" LargeIcon="{Binding Mode=OneWay, Source={StaticResource Contact}}" Icon="{Binding LargeIcon, RelativeSource={RelativeSource Self}}" Command="{Binding CmdShowContacts}" CommandParameter="False"/>


    Ich habs mit BindsDirectlyToSource auf True versucht, ich habs mit Placement versucht und auch mit dem Updatesourcetrigger aber alles ohne Erfolg. Hat jemand einen Tipp für mich?
    Danke
    mfG.
    Stephan
    Hallo Stephan

    als erstes mal.... was sagt denn die Ausgabe? Keine Bindingfehler?
    Bitte check das mal und Berichte.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo Sascha,

    die Ausgabe sagt nichts, es kommt weder ein Fehler noch sonst irgendein Hinweis.
    Ich habe natürlich versucht mit einem Breakpoint auf das Command auf die Execute und CanExecute Routinen zu reagieren aber auch hier keine Meldung.
    mfG.
    Stephan
    OK, wenn in der Ausgabe kein Bindingfehler angezeigt wird stimmt das Binding aber auf jeden Fall.

    Kannst du ne kleine Demo machen die den "Fehler" reproduziert. Denn nur mit dem Teil an Snippets ist es schwer dies nachzuvollziehen. Vorallem wenn das Binding ankommt, die Frage ist nur wo es ankommt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ich hab's gefunden, anscheinend musste das Binding Selbst leer sein, dafür mit Path auf PlacementTarget.Command und als Ancestor das ContextMenu angegeben werden.
    Ich hatte in meinen versuchen immer auf den Button verwiesen nicht aber auf das ContextMenü...

    XML-Quellcode

    1. <Style x:Key="RibbonButtonWithMenu" TargetType="{x:Type Fluent:Button}" BasedOn="{StaticResource {x:Type Fluent:Button}}">
    2. <Setter Property="ContextMenu">
    3. <Setter.Value>
    4. <Fluent:ContextMenu>
    5. <Fluent:MenuItem Header="{lex:Loc Key=new_window}"
    6. Command="{Binding Path=PlacementTarget.Command, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
    7. CommandParameter="True"
    8. Icon="{StaticResource NewWindow}"/>
    9. </Fluent:ContextMenu>
    10. </Setter.Value>
    11. </Setter>
    12. </Style>
    mfG.
    Stephan