【问题标题】:XAML ContextMenu gets bound to wrong row in a DataGridXAML ContextMenu 绑定到 DataGrid 中的错误行
【发布时间】:2010-05-05 21:19:59
【问题描述】:

我有一个基于 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 正在重用之前创建的 MenuItem 实例。

当显示更改的项目时,如何强制刷新 ContextMenu? ContextMenu 或 ContextMenuService 上没有“更新方法”。

【问题讨论】:

  • 你能描述一下你是如何设法让这个菜单“绑定到数据网格行”的吗?
  • 它实际上并没有绑定到行本身。它绑定到 DataGrid 中的一个单元格。我添加了一些 XAML 来显示 DataGrid 中的模板列。我找不到将其绑定到行的方法。几乎做到了,但是 ContextMenuService 中发生了太多的魔法让我无法做到
  • 微软向我发送了解决方法.. 关于主题的博客条目待定...

标签: silverlight xaml silverlight-4.0 contextmenu


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多