参考资料:https://blog.youkuaiyun.com/WPwalter/article/details/83473313
方法一
主要是x:Reference的应用,不过因为存在循环依赖的问题,需要一个代理
不过仔细看代理类发现我们并没有必要手动创建一个类,直接从wpf现有的类型中找一个类似的类即可,
值得一提的是,代理的方式适合各种需要xaml中绑定数据延迟加载的情况,不单单是在此处的应用。
<wpf:MapControl x:Name="Root">
<wpf:MapControl.Resources>
<DiscreteObjectKeyFrame x:Key="proxy" Value="{x:Reference Name=Root}" />
</wpf:MapControl.Resources>
<wpf:MapControl.ContextMenu>
<ContextMenu DataContext="{Binding Source={StaticResource proxy}, Path=Value.DataContext}">
<MenuItem Header="11" Command="{Binding CommandInDataContext}"/>
<MenuItem Header="22" />
</ContextMenu>
</wpf:MapControl.ContextMenu>
</wpf:MapControl>
方法二
通过样式
<DataGrid.Resources>
<ContextMenu x:Key="RowMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
<MenuItem
Command="{Binding DataContext.OpernFilePathCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"
CommandParameter="{Binding}"
Header="打开文件位置" />
</ContextMenu>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
</Style>
</DataGrid.RowStyle>