我正在创建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();
}
}
MenuItem
。CanExecute
?不应该一直吗?我只想在点击按钮时运行packer.Run。我想我应该实施ICommand
,但我甚至不确定我应该这样做吗?
有人可以帮帮我吗?
谢谢, 米格尔
答案 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所属的命名空间。