假设我有一个窗口,其中包含一个返回命令的属性(实际上,它是一个带有在ViewModel类中的命令的UserControl,但为了方便起见,让我们保持简单以重现问题)。
以下内容可以正常工作:
<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 Error: 4 : 找不到引用为'ElementName=myWindow'的绑定源。BindingExpression:Path=MyCommand; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
为什么会出现这个问题?如何解决?不能使用DataContext
,因为在可视树的下方,DataContext
已经包含了实际显示的数据。我已经尝试使用{RelativeSource FindAncestor, ...}
,但是会产生类似的错误消息。