以下是View.xaml.cs中的代码:
private RelayCommand _closeCommand;
public ICommand CloseCommand
{
get
{
if (_closeCommand == null)
{
_closeCommand = new RelayCommand(param => this.OnClose());
}
return _closeCommand;
}
}
public void OnClose()
{
Close();
}
以下是我的View.xaml中的一些代码:
<Window.ContextMenu>
<ContextMenu>
<MenuItem Name="menuItem_Close" Header="Close" Command="{Binding CloseCommand}" />
</ContextMenu>
</Window.ContextMenu>
当我运行程序并选择关闭菜单项时,没有任何反应。 CloseCommand代码甚至没有被执行。
答案 0 :(得分:9)
ContextMenu
不是VisualTree的一部分,这就是DataContext
不会被继承的原因。这里ContextMenu.PlacementTarget
是获取Window
的某种转发:
<MenuItem Name="menuItem_Close" Header="Close"
Command="{Binding Path=PlacementTarget.DataContext.CloseCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
答案 1 :(得分:0)
老问题,新答案。对我来说问题是GalaSoft.MvvmLight.Command.RelayCommand
不支持关闭操作。 RelayCommand存储对动作的弱引用,因此闭包几乎立即被释放。该操作必须是模型方法或以其他方式保留。
答案 2 :(得分:-1)