2010-10-07 29 views
11

Tengo un control, en ese control hay un comando llamado SaveToClipboardCommand. Quiero vincular un comando de elemento de menú contextual a ese comando para que cuando haga clic en él, se ejecute el comando copiar al portapapeles.Encuadernación desde el elemento de menú contextual al control principal

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

El control (por motivo de la discusión) se define así:

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

He intentado usar fijaciones basadas RelativeSource y ElementName pero ambos están fallando. ¿Lo que estoy tratando de hacer es posible?

Gracias!

+0

¿Qué RelativeSource ha intentado? ¿Has probado FindAncestor? –

+0

'{Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = {x: Type Control}}, Path-SaveToClipboardCommand}' – TerrorAustralis

+0

¿Está intentando vincular el menú contextual de un control a un comando definido dentro del control? Si es así, entonces debes hacer el enlace en el XAML de ese control y establecer su DataContext en 'esto'. Si está vinculando al miembro del comando fuera del alcance de la clase 'Control', entonces DataContext debe tenerlo para que se resuelva. – whoisthis

Respuesta

19

EDITAR (después de mostrar cómo se expone el control): Bueno ContextMenu es un poco complicado, porque no es en realidad parte de un mismo árbol visual. Trate de hacer esto:

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

Respuesta original

Es este comando expuesto como un pública propiedad del control? Si el comando es en realidad expuesta en un modelo de vista que cuelga de del control DataContext , hacer lo siguiente:

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

puedo mostrar cómo este comando se actualmente expuesto?

+0

El comando está en edición. RelayCommand es solo una implementación estándar de ICommand – TerrorAustralis

+0

Bueno ContextMenu es un tanto complicado, porque en realidad no es parte del mismo árbol visual. Intente hacer esto:

+0

echaré un vistazo a este mañana :) gracias amigo. Menús contextuales sangrientos – TerrorAustralis

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

HTH

+1

Intenté eso, pero no funciona para mí :(dice 'El enlace no puede encontrar la fuente ...' – TerrorAustralis

Cuestiones relacionadas