/ / WPF Binding CommandParameter an GridViewColumnHeader-Inhalt aus einem MenuItem - wpf, xaml

WPF Binding CommandParameter an GridViewColumnHeader Inhalt von einem MenuItem - wpf, xaml

Ich denke, es ist eine ziemlich spezifische Frage, aber ich versuche zu binden, wie CommandParameter das Content von einem GridViewColumnHeader. Wie Sie im Code sehen werden, funktioniert es, wenn ich es im zweiten Setter des Stils mache: <Setter Property="CommandParameter" Value="{Binding Content, RelativeSource={RelativeSource Self}}"/>. Aber es funktioniert nicht für meine Menüpunkte. Wie soll ich sie binden? Hier ist der Code:

    <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="GridViewColumnHeader">
<Setter Property="Command" Value="{Binding SortBy}" />
<Setter Property="CommandParameter" Value="{Binding Content, RelativeSource={RelativeSource Self}}" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu Tag="{Binding Content, RelativeSource={RelativeSource AncestorType=GridViewColumnHeader}}">
<MenuItem CommandParameter="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
Header="{UI:Language @{SortAscending}}"
Command="{Binding SortAscending}" />

Antworten:

2 für die Antwort № 1

Binde den Tag Eigentum an der PlacementTarget des ContextMenu selbst:

<ContextMenu Tag="{Binding PlacementTarget.Content, RelativeSource={RelativeSource Self}}">
<MenuItem CommandParameter="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"

1 für die Antwort № 2

Hier ist, was für mich funktioniert hat, ein Mitarbeiter hat mir die Lösung gegeben, mir fehlte ein "DataContext", da "GridView" tatsächlich in einer "ListView" enthalten ist:

<ContextMenu Tag="{Binding PlacementTarget.CommandParameter, RelativeSource={RelativeSource Self}}"
DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">

Alles was ich getan habe ist a DataContext zum ContextMenu. hoffe, das hilft allen, die ähnliche Probleme haben könnten.