Sto tentando di associare un comando a un menu in WPF. Sto usando lo stesso metodo che ha funzionato con tutti i miei altri binding di comandi, ma non riesco a capire perché non funzioni qui.MVVM binding command to contextmenu item
che sto attualmente vincolante miei comandi in questo modo:
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MyCommand}"
Questo è dove le cose vanno male (questo è all'interno di un UserControl)
<Button Height="40" Margin="0,2,0,0" CommandParameter="{Binding Name}"
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.ConnectCommand}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" CommandParameter="{Binding Name}"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.RemoveCommand}"/>
</ContextMenu>
</Button.ContextMenu>
...
Il primo comando funziona come dovrebbe vincolante, ma il secondo si rifiuta di fare qualsiasi cosa. Ho provato a cambiare il livello di antenato e nominare il mio Controllo per accedervi tramite ElementName invece di RelativeSource, ma ancora nessuna modifica. Continua a dire "Impossibile trovare la fonte per l'associazione con riferimento ..."
Cosa mi manca?
avrei dovuto controllare, ma il MenuItem può essere in un albero diverso, in modo che non riesce a trovare l'UserControl in quanto tecnicamente è non un antenato (Snoop potrebbe confermare se ricordo bene o no). Per gli altri binding di comandi (come il comando per il controllo Button), perché non puoi semplicemente Command = "{Binding Path = ConnectCommand}"? Il pulsante deve ereditare DataContext da UserControl e pertanto non richiede l'intera sintassi RelativeSource/FindAncestor. – MetalMikester