Próbuję powiązać polecenie z menuitem w WPF. Używam tej samej metody, która działa dla wszystkich innych powiązań poleceń, ale nie mogę zrozumieć, dlaczego to nie działa tutaj.Polecenie wiązania MVVM do elementu menu kontekstowego
Jestem obecnie wiążące moich poleceń tak:
Command = "{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.MyCommand}"
To gdzie to pójdzie źle (jest wewnątrz 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>
...
pierwszym łączącym prace jak powinien polecenie, ale drugi nie chce nic zrobić. Próbowałem zmienić poziom przodków i nazwać moją Kontrolę, aby uzyskać do niej dostęp przez ElementName zamiast RelativeSource, ale wciąż nie zmienia się. Powtarza się "Nie można znaleźć źródła do powiązania z odniesieniem ..."
Czego mi brakuje?
Musiałbym sprawdzić, ale MenuItem może być w innym drzewem, tak że nie można znaleźć UserControl ponieważ to technicznie nie przodek (Snoop mógłby potwierdzić, czy pamiętam to prawo, czy nie). W przypadku innych powiązań poleceń (takich jak polecenie kontrolki Button), dlaczego nie można po prostu wykonać polecenia Command = "{Binding Path = ConnectCommand}"? Przycisk powinien dziedziczyć DataContext z UserControl i dlatego nie wymaga całej składni RelativeSource/FindAncestor. – MetalMikester