我有一个ContextMenu
WPF 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
)是为菜单项创建的,但在其他行上调用上下文菜单时永远不会重新分配它。