2015-05-07 44 views
1

我有點迷失了綁定。 我在過去一小時嘗試了很多東西,我無法列舉所有這些。 DataTemplate中的contextMenu有問題。如何將命令綁定到DataTemplate中的ContextMenu中

解釋:我有一個UserControl。它的dataContext本身。在UserControl裏面,我有一個ItemsControl來表示一個超鏈接列表。我的ItemsControlitemsSource被綁定(它由對象元素組成)。 我重新定義了ItemsControl.ItemTemplate。在裏面,我創建了一個HyperLink,TextBlock作爲孩子,使其工作,並在此TextBlock,我通過執行以下設置ContextMenu

<TextBlock.ContextMenu> 
    <ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}"> 
    <MenuItem Header="Enregistrer la pièce jointe" Foreground="Black"> 
     <MenuItem Header="Dans le dossier patient" Command="{Binding DataContext.SaveAttachmentIntPatientFolderCommand, RelativeSource={RelativeSource AncestorType=UserControl}}" CommandParameter="{Binding FilePath}" Foreground="Black" /> 
     <MenuItem Header="Enregistrer sous ..." Command="{Binding DataContext.SaveAttachmentAsCommand}" CommandParameter="{Binding FilePath}" Foreground="Black" /> 
    </MenuItem> 
    </ContextMenu> 
</TextBlock.ContextMenu> 

所以我

UserControl --> ItemsControl --> ItemTemplate --> HyperLink --> TextBlock --> ContextMenu --> ContextMenuItem 

我知道,我的第一個相對源不工作,我有一個綁定錯誤。我想要的是綁定在我的UserContorl datacontext上,它們具有這些命令。

我該怎麼辦?

感謝

回答

4

的ContextMenu採取的ItemsControl的DataContext的,所以它不能直接訪問視圖模型。它也不是VisualTree的一部分,所以你不能執行RelativeSource綁定。所以我們需要通過TextBlock的Tag屬性獲取UserControl的DataContext,然後綁定到ContextMenu。 您參考下面的代碼。

<TextBlock Text="{Binding }" Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=UserControl}}"> 
          <TextBlock.ContextMenu> 
           <ContextMenu > 
            <MenuItem Header="Enregistrer la pièce jointe" Foreground="Black"> 
             <MenuItem Header="Dans le dossier patient" Command="{Binding Path=PlacementTarget.Tag.SaveAttachmentIntPatientFolderCommand, 
              RelativeSource={RelativeSource AncestorType=ContextMenu}}"             
                Foreground="Black" /> 
             <MenuItem Header="Enregistrer sous ..." Command="{Binding Path=PlacementTarget.Tag.SaveAttachmentAsCommand, 
              RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                Foreground="Black" /> 
            </MenuItem> 
           </ContextMenu> 
          </TextBlock.ContextMenu> 
         </TextBlock>  
+0

真的很聰明!非常感謝 – cdie

相關問題