![](/img/trans.png)
[英]How to bind a Command to a ContextMenu from within an ItemTemplate?
[英]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.