2010-08-19 9 views
21

Ho un tasto:programmazione alzare un comando

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

C'è un modo per eseguire il comando dalla sorgente? Chiamando il clic sul pulsante non aiuta:

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

voglio dire - questo non generare l'evento, ma non solleva il comando. C'è qualcosa di simile a questo RaiseEvent ma solo per Comando? Se non c'è - come posso creare un'istanza ExecutedRoutedEventArgs? È possibile?

Infine, per favore non dirmi come chiamare il comando avoid.

risposta

42

Non sono sicuro se cercavi:

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

con C# 6 e versioni successive (come proposto da Eirik) v'è la forma abbreviata:

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

Grazie. È così facile eppure non sono riuscito a pensarlo! – Jefim

+0

Sembra così strano. Non dovrebbe essere 'if (MyButton.Command! = Null)'? –

+0

Vecchie abitudini, sentitevi liberi di cambiare. Il comportamento è lo stesso ... – HCL

7

Per ottenere ciò è necessario ICommand.Execute(object).

esempio Lavoriamo per il vostro codice di esempio: this.MyButton.Command.Execute(null);

9

Oppure, se non si ha accesso all'elemento dell'interfaccia utente, è possibile chiamare direttamente il comando statico. Per esempio ho un livello di sistema gancio chiave in App.xaml e volevo chiamare il mio play/pausa/stop, ecc eventi mediatici:

CustomCommands.PlaybackPlayPause.Execute(null, null); 

passaggio 2 ° parametro nullo chiamerà tutti gli elementi collegati.

5

Il mio modo preferito per farlo è quello di fare come Sean Sexton raccomanda in Executing a Command Programmatically

Insomma, trovare il comando, controllare se può eseguire e, in caso affermativo, eseguire.

Esempio:

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

Perché penso che sia meglio: Penso che sia il modo migliore perché sarà davvero usare il percorso corretto e non si dipende da nominare alcun controllo. Inoltre, anche se ora sai che non usi "CanExecute", non sai mai quando qualcuno aggiungerà un comportamento per questo in futuro.

Problemi correlati