C# 如何在MenuItems上实现命令

C# 如何在MenuItems上实现命令,c#,wpf,data-binding,command,menuitem,C#,Wpf,Data Binding,Command,Menuitem,在我的程序中尝试将命令绑定到菜单项时,我发现命令与菜单项不一样。我一直在用《邮报》当向导,但到目前为止运气不好。基本上,我的目标是在单击MenuItem时运行命令 这是我看过前面提到的文章后的xaml。我的命令称为CreateFiles: <MenuItem Header="{DynamicResource save}" Command="{Binding Path=PlacementTarget.DataContext.CreateFiles, RelativeSource={Relat

在我的程序中尝试将
命令
绑定到
菜单项
时,我发现
命令
菜单项
不一样。我一直在用《邮报》当向导,但到目前为止运气不好。基本上,我的目标是在单击
MenuItem
时运行
命令

这是我看过前面提到的文章后的xaml。我的
命令
称为
CreateFiles

<MenuItem Header="{DynamicResource save}" Command="{Binding Path=PlacementTarget.DataContext.CreateFiles, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
为了测试我的
命令
是否有效,我在第一个大括号处设置了一个断点。到目前为止,当单击
菜单项时,程序尚未在此断点停止

由于此方法似乎不起作用,如何使
命令
菜单项
一起工作

更新:
命令
更改为
ICommand

更新2:
上下文菜单
&
按钮
xaml:

<Button Click="Button_Click_1" Margin="5,4,0,0" Name="Button_1" Height="55" VerticalAlignment="Top" HorizontalAlignment="Left" Width="55" BorderBrush="Black">...

<ContextMenu x:Name="MainContextMenu" MouseLeave="ContextMenuMouseLeave" Background="White" BorderBrush="#FF959595" SnapsToDevicePixels="False">...
。。。
...

您需要将相对资源的
模式设置为
FindAncestor
以获取
上下文菜单

<MenuItem Header="{DynamicResource save}"
          Command="{Binding Path=PlacementTarget.DataContext.CreateFiles,
             RelativeSource={RelativeSource Mode=FindAncestor,
                                            AncestorType=ContextMenu}}" />

菜单项声明在哪里?它就在XAML中。它是
-->
的一部分,我已将代码更改为此。有没有可能我还需要别的东西?我的程序没有在
createFiles\u Operations()
的断点处停止。
createFiles
的返回类型应该是
ICommand
。什么是
命令
?您能在输出窗口中看到任何绑定错误吗?按钮的DataContext是否正确指向
MainWindowViewModel
?输出窗口中没有绑定错误。我已将我的问题更新为显示
ICommand
,而不是
Command
。就DataContext而言,它是在窗口的构造函数中设置的,如下所示:
DataContext=App.MainWindowViewModel=new MainWindowViewModel()。我没有单独设置按钮的DataContext。我能想到的唯一原因是按钮没有从window或UserControl继承DataContext。否则代码看起来完全完美。
<MenuItem Header="{DynamicResource save}"
          Command="{Binding Path=PlacementTarget.DataContext.CreateFiles,
             RelativeSource={RelativeSource Mode=FindAncestor,
                                            AncestorType=ContextMenu}}" />
<ContextMenu x:Name="MainContextMenu"
             MouseLeave="ContextMenuMouseLeave" Background="White"
             BorderBrush="#FF959595" SnapsToDevicePixels="False">