Скажем, у меня есть Window с возвращающим свойство Command (на самом деле это UserControl с Command в классе ViewModel, но позволяйте максимально упростить задачу, чтобы воспроизвести проблему).
Следующие работы:
<Window x:Class="Window1" ... x:Name="myWindow">
<Menu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</Menu>
</Window>
Но следующее не работает.
<Window x:Class="Window1" ... x:Name="myWindow">
<Grid>
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding MyCommand, ElementName=myWindow}" Header="Test" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>
</Window>
Сообщение об ошибке, которое я получаю,
Ошибка System.Windows.Data: 4: Не удается найти источник для привязки со ссылкой "ElementName = myWindow". BindingExpression: Path = МояКоманда; DataItem = NULL; целевым элементом является "MenuItem" (Name= ''); target является "Command" (тип "ICommand" )
Почему? И как мне это исправить? Использование DataContext
не является опцией, так как эта проблема встречается в визуальном дереве, где DataContext уже содержит фактические данные, отображаемые. Я уже пытался использовать {RelativeSource FindAncestor, ...}
вместо этого, но это дает аналогичное сообщение об ошибке.