我有一个基于XAML的ContextMenu绑定到数据网格中的行。它运行得很好 - 直到网格滚动!
这是可视树或DataGrid行中某个控件的上下文菜单。
<data:DataGridTemplateColumn Header="Customer Details" Width="*">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="Transparent"> <!-- allows click in entire cell -->
<controlsInputToolkit:ContextMenuService.ContextMenu>
<controlsInputToolkit:ContextMenu>
<controlsInputToolkit:MenuItem Header="{Binding CompletedOrderId,StringFormat='Create Reminder for order #\{0\}'}"
CommandParameter="{Binding}">
<controlsInputToolkit:MenuItem.Command>
<command:CreateReminderCommand/>
</controlsInputToolkit:MenuItem.Command>
<controlsInputToolkit:MenuItem.Icon>
<Viewbox>
<Image Width="19" Height="18" Source="../images/reminders.png" VerticalAlignment="Center"/>
</Viewbox>
</controlsInputToolkit:MenuItem.Icon>
</controlsInputToolkit:MenuItem>
<controlsInputToolkit:ContextMenu>
<controlsInputToolkit:ContextMenuService.ContextMenu>
......
ICommand
为CreateReminderCommand
,CommandParameter
绑定到行本身的数据项。
这很好用 - 我可以右键点击一行,它会在菜单项“为订单12345创建提醒”中显示正确的文字。
然后我将datagrid向下滚动一页。如果我一直右键点击项目,那么突然间我会看到一行错误的订单号。我认为必须发生的是:
如果为更改的项目显示ContextMenu,我该如何强制刷新? ContextMenu或ContextMenuService上没有'Update方法。
答案 0 :(得分:2)