XAML ContextMenu绑定到DataGrid中的错误行

时间:2010-05-05 21:20:00

标签: silverlight xaml silverlight-4.0 contextmenu

我有一个基于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>
                 ......

ICommandCreateReminderCommandCommandParameter绑定到行本身的数据项。

这很好用 - 我可以右键点击一行,它会在菜单项“为订单12345创建提醒”中显示正确的文字。

然后我将datagrid向下滚动一页。如果我一直右键点击项目,那么突然间我会看到一行错误的订单号。我认为必须发生的是:

  • DataGrid正在重用它之前创建的MenuItem实例。

如果为更改的项目显示ContextMenu,我该如何强制刷新? ContextMenu或ContextMenuService上没有'Update方法。

相关问题