Программно поднять команду - PullRequest
24 голосов
/ 19 августа 2010

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

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

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

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

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

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

Ответы [ 4 ]

46 голосов
/ 19 августа 2010

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

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

с c # 6 и позже (по предложению eirik) есть краткая форма:

Mybutton.Command?.Execute(null);

Обновление
В соответствии с предложением @Benjol, предоставление значения свойства CommandParameter кнопки может потребоваться в некоторых ситуациях, и его добавление вместо null может рассматриваться как шаблон по умолчанию:

Mybutton.Command?.Execute(MyButton.CommandParameter);
9 голосов
/ 30 апреля 2011

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

CustomCommands.PlaybackPlayPause.Execute(null, null);

, передав 2-й параметр в виде null, вызовет все подключенные элементы.

7 голосов
/ 19 августа 2010

Вам нужно ICommand.Execute(object), чтобы сделать это.

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

6 голосов
/ 31 октября 2014

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

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

Пример:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...