Подтвердить что ты не робот

Программно поднять команду

У меня есть кнопка:

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

Есть ли способ выполнить команду из источника? Вызов нажатием кнопки не помогает:

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

Я имею в виду - это поднимает событие, но оно не вызывает команду. Есть ли что-то подобное этому RaiseEvent, но только для Command? Если нет - как я могу создать экземпляр ExecutedRoutedEventArgs? Возможно ли это?

Наконец, пожалуйста, не говорите мне, как avoid вызывать команду.

4b9b3361

Ответ 1

Не уверен, если вы имеете в виду:

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

с С# 6 и более поздним (как предложено eirik), существует короткая форма:

Mybutton.Command?.Execute(null);

Ответ 2

Или, если у вас нет доступа к элементу пользовательского интерфейса, вы можете напрямую вызвать статическую команду. Например, у меня есть ключевой крючок системы в App.xaml и вы хотите вызвать медиа-события play/pause/stop и т.д.

CustomCommands.PlaybackPlayPause.Execute(null, null);

передача второму параметру как null вызовет все прикрепленные элементы.

Ответ 3

Вам нужно ICommand.Execute(object) выполнить это.

Рабочий пример для вашего примера кода: this.MyButton.Command.Execute(null);

Ответ 4

Мой предпочтительный способ сделать это - сделать так, как советует Шон Секстон в Выполнение команды программно

Короче, найдите команду, проверьте, может ли она выполняться, и если да, выполните.

Пример:

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

Почему я думаю, что это лучше: Я думаю, что это лучший способ, потому что он действительно будет использовать правильный путь, и вы не зависите от наименования какого-либо элемента управления. Кроме того, хотя теперь вы знаете, что вы не используете "CanExecute", вы никогда не знаете, когда кто-то добавит к нему поведение в будущем.