Angenommen, ich habe ein Fenster mit einer Eigenschaft, die einen Befehl zurückgibt (in der Tat ist es ein UserControl mit einem Command in einer ViewModel-Klasse), aber lassen Sie uns die Dinge so einfach wie möglich halten Problem).WPF: Binden eines ContextMenu an einen MVVM-Befehl
Die folgenden Werke:
<Window x:Class="Window1" ... x:Name="myWindow">
<Menu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</Menu>
</Window>
aber die folgenden funktioniert nicht.
<Window x:Class="Window1" ... x:Name="myWindow">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Window>
Die Fehlermeldung, die ich bekommen ist
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=myWindow'. BindingExpression:Path=MyCommand; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
Warum? Und wie repariere ich das? Die Verwendung der DataContext
ist keine Option, da dieses Problem weit unten in der visuellen Struktur auftritt, wo der DataContext bereits die tatsächlichen Daten enthält, die angezeigt werden. Ich habe bereits versucht, stattdessen {RelativeSource FindAncestor, ...}
zu verwenden, aber das ergibt eine ähnliche Fehlermeldung.
+1 für die Bearbeitung mit Ihrer Lösung, sollten Sie es machen eine separate Antwort – jan
@jan: Gute Idee, fertig. – Heinzi