我有一个按钮:
<Button x:Name="MyButton" Command="SomeCommand"/>
有没有办法从源代码执行命令?调用按钮上的单击没有帮助:
MyButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
我的意思是 - 这确实会引发事件,但它不会引发命令。有没有类似于RaiseEvent
的内容,只是针对Command?如果没有 - 我如何实例化ExecutedRoutedEventArgs
?有可能吗?
最后 - 请不要告诉我avoid
如何调用命令。
答案 0 :(得分:45)
不确定你的意思是:
if(MyButton.Command != null){
MyButton.Command.Execute(null);
}
使用c#6及更高版本(由eirik提出)有简短形式:
Mybutton.Command?.Execute(null);
<强>更新强>
正如@Benjol所提出的那样,在某些情况下可能需要提供按钮的CommandParameter
- 属性值,并且可以将其添加而不是null
视为默认模式:
Mybutton.Command?.Execute(MyButton.CommandParameter);
答案 1 :(得分:9)
或者,如果您无权访问UI元素,则可以直接调用静态命令。例如,我在App.xaml
中有一个系统范围的键挂钩,想要调用我的播放/暂停/停止等媒体事件:
CustomCommands.PlaybackPlayPause.Execute(null, null);
将第二个参数传递为null将调用所有附加元素。
答案 2 :(得分:7)
您需要ICommand.Execute(object)
才能实现这一目标。
示例代码的工作示例:this.MyButton.Command.Execute(null);
答案 3 :(得分:6)
我喜欢这样做的方法是按照Executing a Command Programmatically
中的Sean Sexton推荐简而言之,找到命令,检查它是否可以执行,如果是,执行。
示例:
if (ApplicationCommands.Open.CanExecute(null, null))
ApplicationCommands.Open.Execute(null, null);
为什么我认为它更好: 我认为这是最好的方法,因为它将真正使用正确的路径而你不依赖于命名任何控件。此外,虽然你现在知道你没有使用“CanExecute”,但你永远不知道将来有人会为它添加一个行为。