(Изменить) Поскольку вы упомянули, что это в шаблоне ItemsControl, все по-другому:
1) Получите класс BindingProxy из этого блога (и прочитайте блог, так как это интересная информация): Как привязать данные, когда DataContext не наследуется .
В основном элементы ItemsControl (или ContextMenu) не являются частью визуального или логического дерева и поэтому не могут найти DataContext вашегоUserControl.Я приношу свои извинения за то, что не написал больше об этом здесь, но автор проделал хорошую работу, объясняя это шаг за шагом, поэтому я никак не мог дать полное объяснение всего за несколько строк.
2) Сделайте что-нибудькак это: (вам, возможно, придется немного адаптировать его, чтобы заставить его работать под вашим контролем):
a.Это даст вам доступ к UserControl DataContext с использованием StaticResource:
<UserControl.Resources>
<BindingProxy
x:Key="DataContextProxy"
Data="{Binding}" />
</UserControl.Resources>
b.При этом используется DataContextProxy, определенный в (a):
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove" CommandParameter="{Binding Name}"
Command="{Binding Path=Data.RemoveCommand, Source={StaticResource DataContextProxy}}"/>
</ContextMenu>
Это работает для нас в таких вещах, как деревья и сетки данных.