【问题标题】:Binding from context menu item to parent control从上下文菜单项绑定到父控件
【发布时间】:2011-04-22 04:09:30
【问题描述】:

我有一个控件,该控件上有一个名为 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 吗?
  • {Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Control}}, Path-SaveToClipboardCommand}
  • 您是否尝试将控件的上下文菜单绑定到控件中定义的命令?如果是这样,那么您应该在该控件的 XAML 中进行绑定并将其 DataContext 设置为“this”。如果您绑定到“控制”类范围之外的命令成员,则 DataContext 应该拥有它以便解决它。

标签: wpf xaml binding


【解决方案1】:

EDIT(在展示了控件的显示方式之后): 好吧 ContextMenu 有点棘手,因为它实际上不是同一可视树的一部分。尝试这样做:

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

原答案

此命令是否公开 控件的属性?如果 命令实际上暴露在一个 ViewModel 挂起控件的 DataContext,执行以下操作:

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

你能告诉我这个命令是怎么回事吗 目前暴露?

【讨论】:

  • 命令正在编辑中。 RelayCommand 只是一个标准的 ICommand 实现
  • 嗯 ContextMenu 有点棘手,因为它实际上不是同一个可视化树的一部分。尝试这样做:
  • 我明天会看看这个 :) 谢谢伙计。血腥的上下文菜单
  • 太棒了!有效。我将不得不更多地研究放置目标绑定:) 感谢您的帮助
【解决方案2】:
Command={Binding ElementName=Control, Path=SaveToClipboardCommand}

HTH

【讨论】:

  • 试过了,但它对我不起作用:(说'绑定找不到源......'
猜你喜欢
  • 2013-05-04
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多