Ответ 1
Не уверен, если вы имеете в виду:
if(MyButton.Command != null){
MyButton.Command.Execute(null);
}
с С# 6 и более поздним (как предложено eirik), существует короткая форма:
Mybutton.Command?.Execute(null);
У меня есть кнопка:
<Button x:Name="MyButton" Command="SomeCommand"/>
Есть ли способ выполнить команду из источника? Вызов нажатием кнопки не помогает:
MyButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
Я имею в виду - это поднимает событие, но оно не вызывает команду. Есть ли что-то подобное этому RaiseEvent
, но только для Command? Если нет - как я могу создать экземпляр ExecutedRoutedEventArgs
? Возможно ли это?
Наконец, пожалуйста, не говорите мне, как avoid
вызывать команду.
Не уверен, если вы имеете в виду:
if(MyButton.Command != null){
MyButton.Command.Execute(null);
}
с С# 6 и более поздним (как предложено eirik), существует короткая форма:
Mybutton.Command?.Execute(null);
Или, если у вас нет доступа к элементу пользовательского интерфейса, вы можете напрямую вызвать статическую команду. Например, у меня есть ключевой крючок системы в App.xaml
и вы хотите вызвать медиа-события play/pause/stop и т.д.
CustomCommands.PlaybackPlayPause.Execute(null, null);
передача второму параметру как null вызовет все прикрепленные элементы.
Вам нужно ICommand.Execute(object)
выполнить это.
Рабочий пример для вашего примера кода: this.MyButton.Command.Execute(null);
Мой предпочтительный способ сделать это - сделать так, как советует Шон Секстон в Выполнение команды программно
Короче, найдите команду, проверьте, может ли она выполняться, и если да, выполните.
Пример:
if (ApplicationCommands.Open.CanExecute(null, null))
ApplicationCommands.Open.Execute(null, null);
Почему я думаю, что это лучше: Я думаю, что это лучший способ, потому что он действительно будет использовать правильный путь, и вы не зависите от наименования какого-либо элемента управления. Кроме того, хотя теперь вы знаете, что вы не используете "CanExecute", вы никогда не знаете, когда кто-то добавит к нему поведение в будущем.