繁体   English   中英

如何将命令绑定到 DataTemplate 中的 ContextMenu

[英]How to bind command into ContextMenu in DataTemplate

我对绑定有点迷茫。 在过去的一个小时里我尝试了很多东西,我无法一一列举。 我在 DataTemplate 中的 contextMenu 有问题。

解释一下:我有一个UserControl 它的 dataContext 是它本身。 在这个UserControl ,我有一个 ItemsControl 来表示超链接列表。 我的ItemsControl itemsSource已绑定(它由对象元素组成)。 我重新定义了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 数据上下文,它有这些命令。

我该如何继续?

谢谢

ContextMenu 接受 ItemsControl 的 DataContext,因此它不能直接访问 ViewModel。 此外,它不是 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>     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM