2011-06-17 11 views
5

Wcześniej używałCzy istnieje różnica między dodaniem polecenia CommandBindings do kontrolki a użyciem metody RegisterClassCommandBinding?

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

gdzie cmdCopy_Executed jest funkcją non-static, ale widziałem ludzi używając

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!"); 
    } 

gdzie CommandBinding jest statyczny. Czy preferowany jest nad innym?

Odpowiedz

6

Ten drugi jest bardziej globalnym handlerkiem, w przeciwieństwie do pierwszego na przykład.

Ponadto, Rejestracja RegisterClassCommandBinding nie może być wyrejestrowana, więc utknąłeś z nią po rejestracji. Ogólnie rzecz biorąc, podczas korzystania z tego najlepiej jest wywoływać metody wirtualne na swoim kontrole, aby ich zachowanie można było zmienić lub obejść.

Dzięki CommandBindings możesz usunąć wszelkie niepotrzebne powiązania. Mogą to również zrobić zewnętrzni użytkownicy twojego sterowania. Możesz dodać wymagane powiązanie polecenia, ale ktoś może łatwo wykonać element.CommandBindings.Clear().

Istnieją różnice, a każdy ma swoje miejsce. Jeśli chcesz, aby był łatwo dostosowywany, wybrałbym ten pierwszy.

Powiązane problemy