У меня есть XAML, базирующийся ContextMenu, связанный со строками в datagrid. Это работает просто великолепно - пока сетка не прокручивается!
Это - контекстное меню для одних из средств управления в визуальном дереве или строке 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
связывается с элементом данных для самой строки.
Это работает просто великолепно - я могу щелкнуть правой кнопкой по строке, и она покажет мне правильный текст в пункте меню 'Create Reminder for order 12345'.
Затем я прокручиваю datagrid ниже на страницу. Если я буду ехать по правой стороне дороги, нажав на объекты затем внезапно, то я буду видеть неправильный номер заказа для строки. Я думаю, что должно происходить, это:
Как я могу вызвать обновление ContextMenu, когда он отображен для объекта, который изменяется? Нет никакого 'Метода обновления на ContextMenu или ContextMenuService.
Оказалось, что это ошибка Silverlight, связанная с привязкой элементов.
Решение, представленное здесь, устраняет проблему.