2010-08-19 20 views
21

tengo un botón:aumentar mediante programación un comando

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

¿Hay una manera de ejecutar el comando de la fuente? Llamando el clic en el botón no ayuda:

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

quiero decir - que esto hace aumentar el evento, pero no levanta el comando. ¿Hay algo similar a este RaiseEvent pero solo para Command? Si no hay, ¿cómo puedo instanciar ExecutedRoutedEventArgs? ¿Es posible?

Por último, no me digas cómo llamar al comando avoid.

Respuesta

42

No estoy seguro si decir:

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

con C# 6 y posteriores (como propone eirik) no es la forma corta:

Mybutton.Command?.Execute(null); 
+1

Gracias. ¡Es tan fácil, pero no pude pensar en eso! – Jefim

+0

Eso se ve muy extraño. ¿No debería ser 'if (MyButton.Command! = Null)'? –

+0

Viejos hábitos, siéntete libre de cambiar. El comportamiento es el mismo ... – HCL

7

Necesita ICommand.Execute(object) para lograr eso.

Ejemplo de trabajo para su código de ejemplo: this.MyButton.Command.Execute(null);

9

O si no tiene acceso al elemento UI, puede llamar directamente al comando estático. Por ejemplo, tengo un sistema de gancho ancho clave en App.xaml y quería llamar a mi reproducir/pausa/parada, etc eventos de medios:

CustomCommands.PlaybackPlayPause.Execute(null, null); 

pasando segundo parámetro como nula llamará a todos los elementos adjuntos.

5

Mi manera preferida de hacerlo es hacer lo que Sean Sexton recomendamos en Executing a Command Programmatically

En pocas palabras, encontrar el comando, comprobar si se puede ejecutar y si es así, ejecute.

Ejemplo:

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

por las que creo que es mejor: creo que es la mejor manera porque va a utilizar realmente el camino correcto y usted no depende de nombrar a ningún control. Además, aunque ahora sepa que no utiliza "CanExecute", nunca sabrá cuándo alguien le agregará un comportamiento en el futuro.

Cuestiones relacionadas