WPF - 绑定菜单项

时间:2009-11-20 02:33:43

标签: wpf binding menu menuitem

我正在创建Menu并在运行时绑定MenuItem,如下所示,但我无法使其正常工作。

我正在创建Menu,如下所示:

  Menu menu = new Menu();      
  menu.Items.Add(new MenuItem {  Command = new PackCommand(), Header = "Pack" });
  DockPanel.SetDock(menu, Dock.Top);
  content.Children.Add(menu);

我正在实施ICommand

public static class PackCommand : ICommand
{
  Boolean CanExecute(object parameter)
  {
    return true;
  }

  void Execute(object parameter)
  {
    Packer packer = new Packer();
    packer.Run();
  }
}
  1. 我不确定如何绑定MenuItem
  2. 为什么CanExecute?不应该一直吗?我只想在点击按钮时运行packer.Run。
  3. 我想我应该实施ICommand,但我甚至不确定我应该这样做吗?

    有人可以帮帮我吗?

    谢谢, 米格尔

1 个答案:

答案 0 :(得分:0)

有些情况下你想要实现CanExecute,因为这就是控制按钮状态的原因。例如,你可以有一个按钮,你不希望用户按下按钮,直到他们做了其他事情。在CanExecute中,您可以检查GUI的状态并确保发生这种情况。

如果您始终希望按钮可单击/可执行,则返回true。

就绑定而言,在您的XAML中,您可以在MenuItem元素中指定一个Command。类似的东西:

<MenuItem Command="PackCommand" Header="MyHeader" />

现在你仍然需要在代码隐藏中正确定义你的命令。以下是我之前完成命令的方法 - 也许它会帮助你朝着正确的方向前进:

public class GUICommands
{
    private static RoutedUICommand start;

    static GUICommands()
    {
        start = new RoutedUICommand( "Start", "Start", typeof(GUICommands));
    }

    public static RoutedUICommand Start
    {
        get { return start; }
    }
}

仅供参考,在我的XAML中,我会像这样绑定我的命令:

<MenuItem Command="my:GUICommands.Start" />

其中“my”是我在XAML中声明的xmlns,它对应于GUICommands所属的命名空间。