2010-10-07 23 views
11

Posiadam kontrolę, w przypadku tej kontroli jest to polecenie o nazwie SaveToClipboardCommand. Chcę powiązać polecenie elementu menu kontekstowego z tym poleceniem, aby po jego kliknięciu wykonywał polecenie kopiowania do schowka.Powiązanie elementu menu kontekstowego z formantem nadrzędnym

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

Kontrola (czysto teoretycznie) jest zdefiniowana następująco:

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

Próbowałem za pomocą wiązań RelativeSource i ElementName opartych ale oba są niepowodzeniem. Czy to, co próbuję zrobić, nawet możliwe?

Dzięki!

+0

Co próbowałeś użyć RelativeSource? Czy próbowałeś FindAncestor? –

+0

'{Wiążący RelativeSource = {Tryb RelativeSource = FindAncestor, AncestorType = {x: Kontrola typu}}, Path-SaveToClipboardCommand}' – TerrorAustralis

+0

Czy próbujesz powiązać z menu kontekstowego formantu polecenie zdefiniowane w formancie? Jeśli tak, powinieneś wykonać powiązanie w XAML tej kontrolki i ustawić jej DataContext na "this". Jeśli łączysz się z członkiem polecenia poza zakresem klasy "Control", to DataContext powinien go mieć, aby został rozwiązany. – whoisthis

Odpowiedz

19

EDIT (po pokazaniu jak kontrola jest narażony): Dobrze ContextMenu jest nieco kłopotliwe, ponieważ nie jest właściwie częścią tego samego drzewa wizualnej. Spróbuj zrobić tak:

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

odpowiedź Original

Czy ta komenda narażone jako publiczne własność Control? Jeśli komenda jest rzeczywiście wystawiony w ViewModel wieszania kontrolki DataContext, aby wykonać następujące czynności:

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

można pokazać, jak ta komenda jest obecnie narażony?

+0

Polecenie jest w edycji RelayCommand jest tylko standardową implementacją ICommand – TerrorAustralis

+0

Well ContextMenu jest nieco trudne, ponieważ w rzeczywistości nie jest częścią tego samego Spróbuj tego:

+0

Zajrzę do tego tomorowa :) dzięki kolego. Krwawe menu kontekstowe – TerrorAustralis

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

HTH

+1

Próbowałem, ale to nie działa dla mnie :(mówi "Binding can not found source ..." – TerrorAustralis

Powiązane problemy