Sto cercando consigli sugli stati di gestione in un ambiente MVVM WPF.
Ad esempio, supponiamo di avere
- UnTreeView(oqualchealtroItemsControl)conalcunielementie
- unpulsanteabilitatoquandounelementoèselezionato.
MyViewModelcontieneunaproprietàSelectedItem
associataalSelectedItem
diTreeView.
Quandosifaclicsulpulsante,sipassaa"stato speciale": l'attuale SelectedItem
viene memorizzata da qualche parte per un riferimento futuro (chiamiamo la variabile di memorizzazione FirstSelectedItem
). Quindi la selezione viene cancellata, il pulsante è disabilitato e l'utente deve selezionare di nuovo un oggetto (può essere qualsiasi oggetto, anche lo stesso). Quindi otteniamo una voce in SelectedItem
. Quindi i dati dell'elemento memorizzato in FirstSelectedItem
vengono modificati in base a SelectedItem
(modifica alcune proprietà interne che non sono visibili nella vista). Al termine, SelectedItem
viene ripristinato per contenere FirstSelectedItem
, il pulsante è abilitato e la vista è di nuovo in "stato normale".
Mi piacerebbe sapere come ti avvicini a questi problemi in WPF. Per me è importante usare il pattern MVVM e usare codebehind solo per reindirizzare le cose al ViewModel, e che è possibile dare a ogni elemento dell'interfaccia utente un aspetto e un comportamento diverso a seconda dello stato corrente . In un esempio più complicato, potrebbe essere che alcuni controlli diventino disabilitati o mostrino o eseguano un altro comando del solito quando un determinato stato è attuale.
Per quanto riguarda l'aspetto, penso che un modo sarebbe avere una proprietà State
nel ViewModel. Gli elementi dell'interfaccia utente possono quindi in qualche modo rendere il loro aspetto dipendente da quello stato (anche se non so come, ma sono sicuro che sia possibile).
Per il comportamento, non ne ho idea. Per quanto ne so, un pulsante può legarsi a un unico comando e uno solo. Oppure è possibile modificare l'associazione in base a State
?