2009-05-14 13 views

risposta

49

Il comando di inoltro non esiste in WPF, è solo una classe esterna che è stata evidenziata dopo essere stata definita in this MSDN article. Devi scriverlo da solo se vuoi usarlo.

Altrimenti puoi eseguire il comando Delega dal toolkit WPF here che ha un po 'di funzionalità extra rispetto al codice RelayCommand.


Ah, la domanda è cambiata mentre stavo scrivendo questa risposta. Supponendo che si stia utilizzando RelayCommand come sopra definito, è necessario fornirlo con uno o due delegati, uno che restituisce un bool che determina se il comando è in uno stato valido da eseguire e un secondo che non restituisce nulla e che esegue effettivamente il comando comando. Se non si fornisce un delegato "CanRun", il comando considererà che è sempre in uno stato valido. Il codice utilizzato in questo articolo:

RelayCommand _saveCommand; 
public ICommand SaveCommand 
{ 
    get 
    { 
     if (_saveCommand == null) 
     { 
      _saveCommand = new RelayCommand(param => this.Save(), 
       param => this.CanSave); 
     } 
     return _saveCommand; 
    } 
} 

Dichiara una RelayCommand che chiamerà il metodo Save() quando attivato e restituire la proprietà CanSave come un test per la validità. Quando questo comando è associato a un pulsante in WPF, la proprietà IsEnabled del pulsante corrisponderà alla proprietà CanSave del ViewModel e quando si fa clic sul pulsante (supponendo che sia abilitato) il metodo Save() verrà chiamato sul ViewModel.

+1

Ho avuto un vantaggio perché l'ho cercato ieri per questa risposta: http://stackoverflow.com/questions/858268/in-mvvm-what-is-the-best-way- for-the-viewmodel-to-respond-to-user-actions-in-the/858303 # 858303 –

+3

Vorrei che gli esempi di codice degli articoli di MSDN non fossero tutti mescolati insieme, sono stati così per mesi, qualcuno conosce uno specchio o qualcosa del genere quello li mostra normali? –

+0

Il comando di inoltro errato/non aggiornato esiste, ma fa parte del https://mvvmlight.codeplex.com/ toolkit – MikeT

7

In alternativa alla creazione di wrapper RelayCommand per tutti i metodi, è possibile suggerire una libreria e un'origine gratuite che consentano di utilizzare l'associazione {BindTo Save()}. L'ho creato per semplificare i miei attacchi. Rende anche molto più facile l'associazione relativa. Puoi trovarlo qui: http://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html

+2

Sembra molto bello, anche se non è stato testato. Ma ti suggerisco di migliorare il post sul blog e spiegare i dettagli di implementazione. Sebbene postare il codice su Github sarebbe molto bello. E anche considerare di mettere più (alcuni!) Codice su questa risposta su StackOverflow. –

+0

+1 per il suggerimento di @ MD.Unicorn di pubblicare il codice su GitHub (o simile). Potrebbe anche essere utile se la libreria fosse disponibile come pacchetto NuGet. –

Problemi correlati