2010-05-05 2 views
1

DataGrid의 행에 바인딩 된 XAML 기반 ContextMenu가 있습니다. 그리드가 스크롤 될 때까지 잘 작동합니다!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> 
       ...... 

ICommandCreateReminderCommand이고 CommandParameter은 행 자체의 데이터 항목에 바인딩된다.

제대로 작동합니다. 행을 마우스 오른쪽 버튼으로 클릭하면 '주문 12345 알림 생성'메뉴 항목에 올바른 텍스트가 표시됩니다.

그런 다음 DataGrid를 페이지 아래로 스크롤합니다. 항목을 계속 오른쪽 클릭하면 갑자기 행에 대한 잘못된 주문 번호가 표시됩니다. 무슨 일이 일어나고 있어야합니다 생각 :

  • DataGrid는 이전에 만든 MenuItem의 인스턴스를 재사용하고 있습니다.

변경되는 항목에 대해 ContextMenu가 표시되면 강제로 새로 고침 할 수 있습니까? ContextMenu 또는 ContextMenuService에는 'Update 메서드가 없습니다.

+0

이 메뉴를 "데이터 격자 행에 바인딩"하는 방법을 설명 할 수 있습니까? – AnthonyWJones

+0

실제로 행 자체에 바인딩되지 않습니다. DataGrid의 셀에 바인딩됩니다. DataGrid의 템플릿 된 열을 표시하기 위해 XAML을 조금 더 추가했습니다. 나는 그것을 행에 묶을 길을 찾을 수 없었다. 거의 했어,하지만 너무 많은 마술이 ContextMenuService에서 계속 진행되어 –

+0

마이크로 소프트가 나에게 해결 방법을 보냈습니다 ... 제목이 보류중인 블로그 항목 ... –

답변

관련 문제