Diciamo che ho una finestra con una proprietà che restituisce un comando (infatti, è un controllo utente con un comando in una classe ViewModel, ma manteniamo le cose il più semplici possibile per riprodurre il problema).WPF: associare un ContextMenu a un comando MVVM
le seguenti opere:
<Window x:Class="Window1" ... x:Name="myWindow">
<Menu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</Menu>
</Window>
ma il seguente non funziona.
<Window x:Class="Window1" ... x:Name="myWindow">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Window>
Il messaggio di errore che ottengo è
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')
Perché? E come posso risolvere questo? L'utilizzo di DataContext
non è un'opzione, poiché questo problema si verifica in fondo alla struttura visiva in cui DataContext contiene già i dati effettivi visualizzati. Ho già provato a utilizzare {RelativeSource FindAncestor, ...}
invece, ma questo produce un messaggio di errore simile.
+1 per la modifica con la soluzione, si dovrebbe fare un separato risposta – jan
@jan: Buona idea, fatto. – Heinzi