从上下文菜单项绑定到父控件

14

我有一个控件,该控件上有一个名为SaveToClipboardCommand的命令。我想将上下文菜单项命令绑定到该命令,以便在单击时执行复制到剪贴板命令。

<Control x:Name="Control">
    <Control.ContextMenu>
        <ContextMenu>
            <MenuItem Command={"Bind to SaveToClipboardCommand here"} Header="Some Header" />
        </ContextMenu>
    </Control.ContextMenu/>
</Control>

这个控件(举例而言)是这样定义的:

partial class Control
{
      private ICommand _saveToClipboard;
      public ICommand SaveToClipboardCommand
      {
          get
          {
              if (_saveToClipboard == null)
              {
                  _saveToClipboard = new RelayCommand(
                         x=> SaveToClipboard());
              }
              return _saveToClipboard;
          }
     }
}

我尝试使用相对源(RelativeSource)和元素名称(ElementName)进行绑定,但两者都失败了。我正在尝试的东西是否可能实现?

谢谢!


你尝试过哪些RelativeSource?你尝试过使用FindAncestor吗? - Wonko the Sane
{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Control}}, Path-SaveToClipboardCommand} - TerrorAustralis
你是否正在尝试将控件的上下文菜单绑定到控件内定义的命令?如果是这样,那么你应该在该控件的XAML中进行绑定,并将其DataContext设置为“this”。如果你正在绑定到“Control”类范围之外的命令成员,则DataContext应该被解析。 - Bhupendra
2个回答

21

编辑(在展示了控件如何被暴露后): ContextMenu有些棘手,因为它实际上不是同一可视化树的一部分。尝试执行以下操作:

<MenuItem Command="{Binding Path=PlacementTarget.SaveToClipboardCommand,
    RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>

原始回答

这个命令是否作为控件的公共属性公开?如果命令实际上在控件的DataContext挂载的ViewModel中公开,可以执行以下操作:

Command={Binding ElementName=Control, Path=DataContext.SaveToClipboardCommand}

你能展示一下当前暴露的这个命令吗?


命令正在编辑中。RelayCommand只是标准的ICommand实现。 - TerrorAustralis
ContextMenu有点棘手,因为它实际上不是同一可视树的一部分。尝试这样做: <MenuItem Command="{Binding Path=PlacementTarget.SaveToClipboardCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/> - Julian Dominguez
我明天会看一下 :) 谢谢伙计。该死的上下文菜单。 - TerrorAustralis
太好了!它起作用了。我需要更深入地了解放置目标绑定 :) 感谢您的帮助。 - TerrorAustralis

-3
Command={Binding ElementName=Control, Path=SaveToClipboardCommand}

HTH


2
尝试过了,但对我不起作用 :( 显示“绑定无法找到源...” - TerrorAustralis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接