Digamos que tengo una ventana con una propiedad que devuelve un comando (de hecho, es un UserControl con un comando en una clase ViewModel, pero mantengamos todo lo simple posible para reproducir el problema).WPF: Vinculando un ContextMenu a un comando MVVM
las siguientes obras:
<Window x:Class="Window1" ... x:Name="myWindow">
<Menu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</Menu>
</Window>
pero el siguiente no funciona.
<Window x:Class="Window1" ... x:Name="myWindow">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Window>
El mensaje de error que consigo es
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')
¿Por qué? ¿Y cómo soluciono esto? No es posible utilizar el DataContext
, ya que este problema se produce en el árbol visual donde DataContext ya contiene los datos reales que se muestran. Ya traté de usar {RelativeSource FindAncestor, ...}
en su lugar, pero eso produce un mensaje de error similar.
+1 para la edición con su solución, usted debe hacer una respuesta separada – jan
@jan: Buena idea, hecho. – Heinzi