0

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

我正在创建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 。

我想我应该实施ICommand,但我什至不确定我应该这样做吗?

有人可以帮我吗?

谢谢,米格尔

4

1 回答 1

0

在某些情况下,您肯定想要实现 CanExecute,因为它控制了按钮的状态。例如,您可能有一个按钮,您不希望用户在他们完成其他操作之前按下该按钮。在 CanExecute 中,您可以检查 GUI 的状态并确保发生这种情况。

如果您总是希望按钮可点击/可执行,则返回 true。

就绑定而言,在您的 XAML 中,您可以在 MenuItem 元素中指定一个命令。就像是:

<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 所属的命名空间。

于 2009-11-20T05:34:00.723 回答