Sono nuovo in C#, WPF e MVVM. Scusa per questo post piuttosto lungo, sto cercando di impostare tutti i miei punti di comprensione (o non comprensione).Principi di comandi e MVVM - RelayCommands
Dopo aver studiato un sacco di testi sul meccanismo di comando fornito da WPF e il pattern MVVM, ho alcuni problemi a pensare direttamente a come utilizzare queste cose.
Capisco che i comandi forniti per WPF consentono di definire più "punti di chiamata" per la logica di comando che è contenuta in un componente dell'albero visivo. Quando viene chiamato un comando, la chiamata esplode attraverso l'albero visivo (a partire dalla destinazione del comando o dall'elemento focalizzato) fino a quando non incontra un elemento che contiene un CommandBinding che definisce dove si trova la logica del comando.
Ciò che sembra bello è che è possibile definire comandi pubblici senza prima specificare né la logica né i punti di chiamata.
Capisco anche che seguendo il modello MVVM, il ViewModel di una vista dovrebbe gestire la logica mentre l'implementazione di comandi WPF di base consente solo agli elementi visivi di gestirla perché la chiamata bolle attraverso l'albero visivo.
Ho quindi trovato che le implementazioni personalizzate come RelayCommand di Josh Smith possono essere utilizzate in questo caso, poiché si associa un comando chiamato da un elemento della vista (pulsante per esempio) all'oggetto RelayCommand nel ViewModel sottostante.
Tuttavia, non vedo più come sia un comando (in base alla definizione del modello di comando WPF) poiché stiamo specificando direttamente un'implementazione a cui viene fatto riferimento nel ViewModel. Con questo metodo, perdiamo tutti i vantaggi di poter chiamare un comando da qualsiasi luogo senza sapere dove viene implementata la logica. In questo caso, perché non utilizzare direttamente un gestore di eventi Click (ad esempio)?
Qualcuno potrebbe spiegarmi dove ho sbagliato? (grazie per coloro che hanno letto il post fino alla fine!)
Saluti. NR
Ottima risposta. Anch'io sono nel mezzo dell'apprendimento del WPF e lo trovo piuttosto difficile. Puoi commentare come si può usare la logica contenuta in un comando chiamato da un altro metodo? Suppongo che in questo caso dovresti scrivere un metodo con la logica appropriata e chiamarlo anche dal comando? Grazie per il tuo tempo. – MoonKnight
@Killercam In generale, ogni "metodo" che si desidera chiamare viene incapsulato all'interno di un solo 'ICommand' - è possibile avere un 'ICommand' che compone solo più metodi, tuttavia (proprio come avere un metodo che chiama il metodo> 1). –
Grazie mille per il tuo tempo. – MoonKnight