1.由于ContextMenu不属于目标可视化树,因此需要使用Tag和 PlacementTarget.Tag 显式指定ContextMenu 的DataContext。
2.将ViewModel绑定到需要弹出ContextMenu的父控件的Tag上,然后ContextMenu通过绑定PlacementTarget的Tag来获取ViewModel,最后在MenuItem上设置Command才可以。
3.传递CommandParameter到ViewModel,就是把PlacementTarget传递到ViewModel,PlacementTarget就是Tag绑定的节点,一般是ContextMenu的弹出父节点。也就是我下面代码中的RichBorder。VM层接收到RichBorder后,通过视图树去拿他的父节点或孩子节点,以此可拿到所有元素参数。
以下XAML中的Tag,DataContext,Command,CommandParamter需要注意
<wpfHelper:RichBorder x:Name="Picbox" Tag="{Binding RelativeSource={RelativeSource