我有一个ContextMenuWPF DataGridRow。
<ContextMenu x:Key="RowContextMenu">
<MenuItem cal:Message.Attach="SomeMethod()"/>
</ContextMenu>
<Style x:Key="RowWithContextMenu" TargetType="{x:Type DataGridRow}">
<Setter Property="ContextMenu" Value="{StaticResource RowContextMenu}" />
</Style>
中的每一行DataGrid代表一个单独的视图模型类实例。让我们称之为RowViewModel。当我单击菜单项时,SomeMethod()第一次执行并且一切正常,但是单击其他行上的菜单项SomeMethod()将ContextMenu针对第一次显示的行执行。
我在 CM 的源代码中放置了一些断点,ActionMessage.cs发现第一次单击鼠标右键显示菜单会调用事件调用ElementLoaded()方法,而事件调用方法又会调用UpdateContext(). 所以上下文(它是RowViewModel)是为菜单项创建的,但在其他行上调用上下文菜单时永远不会重新分配它。