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">