Popuup
control has it's separate visual tree, you cannot use find ancestor to find the Grid
. The trick here is to use the PlacementTarget
property, that contains the element, the ContextMenu is aligned to, what is the Grid
in our case.DataContext
is set to a dataitem, and not the view model. So you need another relative source lookup, to find the view model. Trick Nr. 2 is to use the Tag
property to bind the view model from outside to the grid, which is the PlacementTarget
used above. And there we are.<DataTemplate> <Grid Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"> <Grid.ContextMenu> <ContextMenu DataContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"> <MenuItem Content="Cut" Command="{Binding CutCommand}" /> <MenuItem Content="Copy" Command="{Binding CopyCommand}" /> <MenuItem Content="Paste" Command="{Binding PasteCommand}" /> </ContextMenu> </Grid.ContextMenu> </Grid> </DataTemplate>