将CommandBindings添加到控件与使用RegisterClassCommandBinding之间有区别吗?
以前我一直在使用
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是静态的。 一个优先于另一个?
后者更像是一个全局处理程序,而前者是每个实例。
此外,RegisterClassCommandBinding无法取消注册,因此一旦注册,您就会陷入困境。 通常,在使用它时,最好在控件上调用虚方法,以便可以更改或绕过它们的行为。
使用CommandBindings,您可以删除不再需要的任何绑定。 这也可以由您的控件的外部用户完成。 因此,您可以添加所需的命令绑定,但有人可以轻松地执行element.CommandBindings.Clear()
。
所以存在差异,每个都有自己的位置。 如果您希望它可以轻松定制,我会选择前者。
- 将文件写入Common Application Data文件夹被拒绝
- CloudBlockBlob.DownloadToStream与DownloadRangeToStream
- 在包含类,使用属性或字段?
- 使用Moq模拟HttpContext.Current.Server.MapPath?
- 如何在ActiveDirectory和.NET 3.5中确定用户所属的所有组(包括嵌套组)
- ASP.NET在If语句中使用.aspx中的Bind / Eval
- DateTime ToString(“dd / MM / yyyy”)返回dd.MM.yyyy
- 无法在ASP.NET MVCentity framework中将值NULL插入到列中
- 保持桌子整体MigraDoc / PDFsharp