tags:

views:

88

answers:

2

I have a control, on that control is a command called SaveToClipboardCommand. I want to bind a context menu item command to that command so that when i click it, the copy to clipboard command is executed.

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

The control (for argument sake) is defined like this:

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

I have tried using RelativeSource and ElementName based bindings but both are failing. Is what i am trying to do even possible?

Thanks!

A: 
Command={Binding ElementName=Control, Path=SaveToClipboardCommand}

HTH

Avatar
Tried that, but it isnt working for me :( says 'Binding cannot find source...'
TerrorAustralis
+3  A: 

EDIT (after showing how the control is exposed): Well ContextMenu is somewhat tricky, because it's actually not part of the same visual tree. Try doing this:

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

Original answer

Is this command exposed as a public property of the Control? If the command is actually exposed in a ViewModel hanging of the control's DataContext, to do the following:

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

Can you show how this command is currently exposed?

Julian Dominguez
Command is in edit. RelayCommand is just a standard ICommand implementation
TerrorAustralis
Well ContextMenu is somewhat tricky, because it's actually not part of the same visual tree. Try doing this: <MenuItem Command="{Binding Path=PlacementTarget.SaveToClipboardCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
Julian Dominguez
i'll have a look into this tomorow :) thanks mate. Bloody context menus
TerrorAustralis
Excellent! it worked. I will have to look more into the placement target binding :) thanks for your assistance
TerrorAustralis