2010-10-07 72 views
11

我有一个控件,在该控件上是一个名为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绑定尝试,但都失败了。我正试图做甚至可能吗?

谢谢!

+0

你试过了什么RelativeSource?你尝试过FindAncestor吗? – 2010-10-07 15:12:31

+0

'{Binding RelativeSource = {RelativeSource Mode = FindAncestor,AncestorType = {x:Type Control}},Path-SaveToClipboardCommand} – TerrorAustralis 2010-10-07 22:33:52

+0

您是否试图将控件的上下文菜单绑定到控件中定义的命令?如果是这样,那么你应该在该控件的XAML中进行绑定,并将其DataContext设置为'this'。如果你绑定到'Control'类范围之外的命令成员,那么DataContext应该有它,以便它被解析。 – whoisthis 2010-10-17 16:43:22

回答

19

编辑(表示控制是如何暴露后): 好文本菜单是有点棘手,因为它实际上是不一样的视觉树的一部分。试着这样做:

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

原来的答复

使用这个命令暴露控制的公共财产 ?如果 命令在 视图模型悬挂控制的 的DataContext实际上暴露,做到以下几点:

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

你能给这个命令是如何目露 ?

+0

命令在编辑。RelayCommand只是一个标准的ICommand实现 – TerrorAustralis 2010-10-12 03:32:53

+0

好ContextMenu有点棘手,因为它实际上不是相同的可视化树,请尝试这样做: 2010-10-12 21:38:14

+0

我会看看这个tomorow :)感谢队友。血腥的上下文菜单 – TerrorAustralis 2010-10-17 05:15:48

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

HTH

+1

试过了,但它不适用于我:(说'绑定找不到源...' – TerrorAustralis 2010-10-07 09:37:50