2011-06-17 8 views
5

以前、私はcmdCopy_Executedが非静的関数ですが、私がいるCommandBindingが静的であるCommandClassをRegisterClassCommandBindingを使用してコントロールに追加するかどうかに違いはありますか?

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

を使用して人々を見てきました

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

を使用していました。 1つは別のものより優先されますか?

答えて

6

後者は、インスタンスごとの前者に対して、グローバルハンドラのほうが多くなります。

また、RegisterClassCommandBindingを登録解除することはできません。登録すると、RegisterClassCommandBindingは登録されません。一般的に、これを使うときは、あなたのコントロール上で仮想メソッドを呼び出すことが最善です。そのため、それらの動作は変更またはバイパスできます。

CommandBindingsを使用すると、不要になったバインディングを削除できます。これは、コントロールの外部ユーザーが行うこともできます。したがって、必要なコマンドバインディングを追加できますが、誰かが簡単にelement.CommandBindings.Clear()を実行できます。

違いがあり、それぞれの場所があります。それを簡単にカスタマイズできるようにしたいのであれば、私は前者と一緒に行くつもりです。

関連する問題