tof*_*tim 5 c# wpf static commandbinding
以前我一直在使用
this.CommandBindings.Add(
new CommandBinding(ApplicationCommands.Copy, this.cmdCopy_Executed, this.cmdCopy_CanExecute))
Run Code Online (Sandbox Code Playgroud)
其中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!");
}
Run Code Online (Sandbox Code Playgroud)
CommandBinding是静态的.一个优先于另一个?
后者更像是一个全局处理程序,而前者是每个实例.
此外,RegisterClassCommandBinding无法取消注册,因此一旦注册,您就会陷入困境.通常,在使用它时,最好在控件上调用虚方法,以便可以更改或绕过它们的行为.
使用CommandBindings,您可以删除不再需要的任何绑定.这也可以由您的控件的外部用户完成.因此,您可以添加所需的命令绑定,但有人可以轻松完成element.CommandBindings.Clear().
所以存在差异,每个都有自己的位置.如果您希望它可以轻松定制,我会选择前者.