以编程方式提出命令

时间:2010-08-19 10:13:44

标签: wpf command

我有一个按钮:

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

有没有办法从源代码执行命令?调用按钮上的单击没有帮助:

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

我的意思是 - 这确实会引发事件,但它不会引发命令。有没有类似于RaiseEvent的内容,只是针对Command?如果没有 - 我如何实例化ExecutedRoutedEventArgs?有可能吗?

最后 - 请不要告诉我avoid如何调用命令。

4 个答案:

答案 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”,但你永远不知道将来有人会为它添加一个行为。