web-dev-qa-db-ja.com

プログラムでコマンドを発生させる

ボタンがあります:

<Button x:Name="MyButton" Command="SomeCommand"/>

ソースからコマンドを実行する方法はありますか?ボタンのクリックを呼び出しても役に立たない:

MyButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

つまり、これはイベントを発生させますが、コマンドを発生させません。これに似たRaiseEventはありますが、コマンドだけですか?ない場合-ExecutedRoutedEventArgsをインスタンス化するにはどうすればよいですか?出来ますか?

最後に、コマンドをavoidで呼び出す方法を教えないでください。

24
Jefim

あなたが意味するかどうかわからない:

if(MyButton.Command != null){
    MyButton.Command.Execute(null);
}

c#6以降では(eirikが提案)、短い形式があります:

Mybutton.Command?.Execute(null);

更新
@ Benjolによって提案されているように、ボタンのCommandParameter- property値を提供することが必要な場合があり、nullの代わりにそれを追加すると、デフォルトのパターン:

Mybutton.Command?.Execute(MyButton.CommandParameter);
48
HCL

または、UI要素にアクセスできない場合は、staticコマンドを直接呼び出すことができます。たとえば、App.xamlにシステム全体のキーフックがあり、自分の再生/一時停止/停止などのメディアイベントを呼び出したいとします。

CustomCommands.PlaybackPlayPause.Execute(null, null);

2番目のパラメータをnullとして渡すと、アタッチされているすべての要素が呼び出されます。

9
Dominic

私が好む方法は、 プログラムでコマンドを実行する でSean Sextonが推奨する方法です。

つまり、コマンドを見つけ、実行できるかどうかを確認し、実行できる場合は実行します。

例:

    if (ApplicationCommands.Open.CanExecute(null, null))
        ApplicationCommands.Open.Execute(null, null);

それが良いと思う理由:それは本当に適切なパスを使用し、コントロールの命名に依存しないため、これが最良の方法だと思います。また、「CanExecute」を使用しないことはわかっていますが、将来誰かがそのための動作を追加する時期はわかりません。

7
Eric Ouellet

そのためにはICommand.Execute(object)が必要です。

サンプルコードの実際の例:this.MyButton.Command.Execute(null);

7
BlueCode