XAML ContextMenu связывается с неправильной строкой в DataGrid

У меня есть 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 ниже на страницу. Если я буду ехать по правой стороне дороги, нажав на объекты затем внезапно, то я буду видеть неправильный номер заказа для строки. Я думаю, что должно происходить, это:

  • DataGrid снова использует экземпляры MenuItem, который он ранее создал.

Как я могу вызвать обновление ContextMenu, когда он отображен для объекта, который изменяется? Нет никакого 'Метода обновления на ContextMenu или ContextMenuService.

1
задан Simon_Weaver 6 May 2010 в 09:42
поделиться

1 ответ

Оказалось, что это ошибка Silverlight, связанная с привязкой элементов.

http://blogs.msdn.com/delay/archive/2010/05/11/we-ve-secretly-changed-this-control-s-datacontext-let-s-see-if-it-notices-workaround-for-a-silverlight-data-binding-bug-affecting-various-scenarios-including-datagrid-contextmenu.aspx

Решение, представленное здесь, устраняет проблему.

2
ответ дан 3 September 2019 в 00:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: