在WPF应用程序中,有一个Grid包含许多对象(它们来自自定义控件).我想使用上下文菜单对每个操作执行一些操作:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
</ContextMenu>
</Grid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
但是在事件处理程序中,我无法知道哪些对象被右键单击:
private void EditStatusCm_Click(object sender, RoutedEventArgs e)
{
MyCustControl SCurrent = new MyCustControl();
MenuItem menu = sender as MenuItem;
SCurrent = menu.DataContext as MyCustControl; // here I get a run-time error
SCurrent.Status = MyCustControl.Status.Sixth;
}
Run Code Online (Sandbox Code Playgroud)
在该注释行上调试器说:对象引用未设置为对象的实例.
请帮忙,我的代码有什么问题?
编辑(补充):
我尝试使用Command方法做同样的事情:
我宣布了一个DataCommands类,RoutedUICommand Requery然后使用Window.CommandBindings
<Window.CommandBindings>
<CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)
MenuItem的XAML现在看起来像:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" Command="MyNamespace:DataCommands.Requery"/>
</ContextMenu>
</Grid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
事件处理程序如下所示:
private void RequeryCommand_Executed(object …Run Code Online (Sandbox Code Playgroud)