将CommandBindings添加到控件和使用RegisterClassCommandBinding有什么区别?

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)是静态的。是否有一种优选于另一种?

1个回答

7
后者更像是全局处理程序,而前者是每个实例的处理程序。
此外,RegisterClassCommandBinding无法取消注册,一旦注册就无法更改。通常,在使用此功能时,最好在控件上调用虚拟方法,以便可以更改或绕过它们的行为。
使用CommandBindings,您可以删除不再需要的任何绑定。这也可以由控件的外部用户完成。因此,您可以添加所需的命令绑定,但其他人可以轻松执行element.CommandBindings.Clear()。
因此,它们之间存在差异,并且每个都有其用途。如果您希望它易于自定义,则应选择前者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接