Come posso utilizzare il RelayCommand
in wpf?Come posso utilizzare RelayCommand in wpf?
risposta
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.
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
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. –
+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. –
- 1. Come utilizzare CommandParameter con un RelayCommand?
- 2. RelayCommand in C#
- 3. RelayCommand CanExecute
- 4. RelayCommand chiamato "vecchio" DataContext
- 5. Legatura di tasti a RelayCommand
- 6. Come utilizzare i controlli personalizzati in WPF
- 7. Come utilizzare IDataErrorInfo.Error in un programma WPF?
- 8. Metodo di esecuzione Relaycommand e senza parametro
- 9. Come utilizzare DateTimePicker obbligatorio in WPF
- 10. Come utilizzare un ContextMenu UserControl in WPF?
- 11. Utilizzare DataContext come CommandParameter in WPF
- 12. Come utilizzare il disegno GDI + in WPF?
- 13. Posso usare NotifyIcon in WPF?
- 14. Firing RelayCommand da CodeBehind destinata a VM
- 15. come posso convertire un'applicazione wpf in exe
- 16. Come posso ottenere DPI in WPF?
- 17. Come utilizzare stringformat in multibinding in WPF XAML
- 18. In XAML WPF come posso concatenare 2 costanti in modo da poter utilizzare percorsi predefiniti?
- 19. Come posso utilizzare un ValueConverter con Databinding in WinForms
- 20. RelayCommand smette di funzionare dopo un po '
- 21. WPF: come utilizzare 2 convertitori in 1 rilegatura?
- 22. Quando utilizzare Path in WPF Binding?
- 23. In WPF, come posso implementare ICommandSource per consentire al controllo personalizzato di utilizzare Command da xaml?
- 24. Formato immagine preferito da utilizzare in WPF?
- 25. Come posso assestare il Caret a un controllo in WPF
- 26. L'implementazione di RelayCommand di Josh Smith è difettosa?
- 27. Come posso utilizzare Html.Action?
- 28. Come posso definire le mie colonne in un DataGrid WPF?
- 29. Come utilizzare i file EPS in un'applicazione WPF o Silverlight?
- 30. Come utilizzare DockStyle.Fill per i controlli standard in WPF?
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 –
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? –
Il comando di inoltro errato/non aggiornato esiste, ma fa parte del https://mvvmlight.codeplex.com/ toolkit – MikeT