I need to create a ContextMenu where I want to pass a currently selected index of the datagrid to a ViewModel using CommandParameter. The following Xaml code doesn’t work. What might be the problem?
<dg:DataGrid ItemsSource="{Binding MarketsRows}"
<dg:DataGrid.ContextMenu >
<ContextMenu >
<MenuItem Header="Add Divider"
CommandParameter="{Binding Path=SelectedIndex,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dg:DataGrid}}}"
Command="{Binding Path= AddDividerCommand}"/>
</ContextMenu>
</dg:DataGrid.ContextMenu>
</dg:DataGrid>
A context menu is not part of the same visual tree. Ancestor bindings dont work as the context menu is not a child of the element it is on; in your case the datagrid.
There are some workarounds, Ive answered this question previously here and here (kind of)
But what you are looking for is the placement target to do something like this (as long as AddDividerCommand is a property on the datagrid(i.e. the placement target)