6

以前我一直在使用

this.CommandBindings.Add(
    new CommandBinding(ApplicationCommands.Copy, this.cmdCopy_Executed, this.cmdCopy_CanExecute))

其中 cmdCopy_Executed 是一个非静态函数,但我见过人们使用

static MyControl()
    {
        CommandBinding binding =
            new CommandBinding(ApplicationCommands.Save, CommandHandler);
        CommandManager.RegisterClassCommandBinding(typeof(MyControl), binding);
    }
 private static void CommandHandler(object target, ExecutedRoutedEventArgs e)
    {
        MessageBox.Show("Command Handled!");
    }

其中 CommandBinding 是静态的。一个比另一个更受欢迎吗?

4

1 回答 1

6

后者更像是一个全局处理程序,而前者是每个实例。

此外,RegisterClassCommandBinding 不能取消注册,因此一旦注册,您就会被卡住。通常,在使用它时,最好在控件上调用虚拟方法,以便可以更改或绕过它们的行为。

使用 CommandBindings,您可以删除不再需要的任何绑定。这也可以由您控件的外部用户来完成。因此,您可以添加一个必需的命令绑定,但有人可以轻松做到element.CommandBindings.Clear()

所以存在差异,每个都有自己的位置。如果您希望它易于定制,我会选择前者。

于 2011-06-17T16:30:57.093 回答