如何在MenuItems上实现命令

时间:2014-01-30 19:05:15

标签: c# wpf data-binding command menuitem

在尝试将Command绑定到我的程序中的MenuItem时,我发现CommandsMenuItems不一样,与其他控件一样。我一直在使用this帖子作为指导,但到目前为止还没有运气。基本上我的目标是在点击Command时运行MenuItem

这是我看过前面提到的帖子之后的xaml。我的Command名为CreateFiles

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

我的Command是在窗口的ViewModel中创建的,并且被声明为正常,但无论如何我都会发布它:

private ICommand _createFiles;

public MainWindowViewModel()
{
   _createFiles = new Command(createFiles_Operations);
}

public ICommand CreateFiles { get { return _createFiles; } }
private void createFiles_Operations()
{

}

为了测试我的Command是否正常工作,我在第一个支持者处设置了一个断点。到目前为止,当点击MenuItem时,程序并没有在此断点处停止。

由于此方法似乎不起作用,我该怎么做才能使CommandsMenuItems一起使用?

更新: Command已更改为ICommand

更新2: ContextMenu&amp; Button 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">...

1 个答案:

答案 0 :(得分:0)

您需要将Mode of RelativeSource设置为FindAncestor才能获得ContextMenu

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

您已设置PlacementRectangle属性以引用其自身,即ContextMenu。不要设置该属性, ContextMenuService在内部将PlacementRectangle设置为应用它的元素(在您的情况下,它将是Button)。

从ContextMenu中删除此PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}"

应该是:

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