假设我有一个窗口,其中包含一个返回Command的属性(事实上,它是一个带有ViewModel类中的Command的UserControl,但让我们尽可能简单地重现问题)。WPF:将ContextMenu绑定到MVVM命令
以下工作:
<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 : Cannot find source for binding with reference 'ElementName=myWindow'. BindingExpression:Path=MyCommand; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'Command' (type 'ICommand')
为什么?我该如何解决这个问题?使用DataContext
不是一个选项,因为此问题发生在DataContext已包含正在显示的实际数据的可视化树下。我已经尝试使用{RelativeSource FindAncestor, ...}
来代替,但这会产生类似的错误消息。
+1与您的解决方案编辑,你应该让一个单独的答案 – jan 2012-05-10 15:42:55
@jan:好主意,做了。 – Heinzi 2012-05-10 16:28:17