【问题标题】:WPF - Bind Menu ItemWPF - 绑定菜单项
【发布时间】:2009-11-20 02:33:43
【问题描述】:

我正在创建一个Menu 并在运行时绑定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,但我什至不确定我应该这样做吗?

有人可以帮帮我吗?

谢谢, 米格尔

【问题讨论】:

  • 会发生什么?菜单出现了吗?如果你在执行方法上设置断点,它会被命中吗?

标签: wpf binding menu menuitem


【解决方案1】:

在某些情况下,您肯定想要实现 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 所属的命名空间。

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多