ボタンがあります:
<Button x:Name="MyButton" Command="SomeCommand"/>
ソースからコマンドを実行する方法はありますか?ボタンのクリックを呼び出しても役に立たない:
MyButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
つまり、これはイベントを発生させますが、コマンドを発生させません。これに似たRaiseEvent
はありますが、コマンドだけですか?ない場合-ExecutedRoutedEventArgs
をインスタンス化するにはどうすればよいですか?出来ますか?
最後に、コマンドをavoid
で呼び出す方法を教えないでください。
あなたが意味するかどうかわからない:
if(MyButton.Command != null){
MyButton.Command.Execute(null);
}
c#6以降では(eirikが提案)、短い形式があります:
Mybutton.Command?.Execute(null);
更新
@ Benjolによって提案されているように、ボタンのCommandParameter
- property値を提供することが必要な場合があり、null
の代わりにそれを追加すると、デフォルトのパターン:
Mybutton.Command?.Execute(MyButton.CommandParameter);
または、UI要素にアクセスできない場合は、staticコマンドを直接呼び出すことができます。たとえば、App.xaml
にシステム全体のキーフックがあり、自分の再生/一時停止/停止などのメディアイベントを呼び出したいとします。
CustomCommands.PlaybackPlayPause.Execute(null, null);
2番目のパラメータをnullとして渡すと、アタッチされているすべての要素が呼び出されます。
私が好む方法は、 プログラムでコマンドを実行する でSean Sextonが推奨する方法です。
つまり、コマンドを見つけ、実行できるかどうかを確認し、実行できる場合は実行します。
例:
if (ApplicationCommands.Open.CanExecute(null, null))
ApplicationCommands.Open.Execute(null, null);
それが良いと思う理由:それは本当に適切なパスを使用し、コントロールの命名に依存しないため、これが最良の方法だと思います。また、「CanExecute」を使用しないことはわかっていますが、将来誰かがそのための動作を追加する時期はわかりません。
そのためにはICommand.Execute(object)
が必要です。
サンプルコードの実際の例:this.MyButton.Command.Execute(null);