Sto lavorando a un'applicazione Silverlight LoB che i progettisti desiderano avere un'interfaccia a schede, simile all'interfaccia di Visual Studio (probabilmente utilizzeremo i controlli Telerik Rad per le schede di ancoraggio). Avendo fatto un prototipo, l'interfaccia sta funzionando bene finora, ma sto avendo problemi a pensare a come implementare la funzionalità di annullamento/ripristino in un progetto MVVM.Come implementare l'annullamento/ripristino in un'applicazione MVVM?
La funzionalità annullamento/ripristino deve:
- On annullamento/ripetizione, ripristinare lo stato di interfaccia utente, cioè fuoco ritorno, selezione ecc controllo (s) (ad esempio una casella di testo) che il cambiamento ha avuto origine da.
- avere uno stack per-view undo/redo
In genere, mi piacerebbe utilizzare il modello di comando, ma non sono sicuro di come applicare tale con MVVM.
Ho usato comandando & vincolante per ottenere il idealizzato loose-accoppiamento dei punti di vista & view-modelli, ma rende undo/redo molto più complicato, dal momento che il modello vista non ha alcun concetto della vista e lo stato della vista quando viene ricevuto un comando o viene modificata una proprietà associata. Sembra che io abbia bisogno di un qualche tipo di tracciamento del servizio su quale vista è attiva ogni volta che l'utente esegue un'azione annullabile e ottiene lo stato per il successivo ripristino.
Esiste un consenso su quale sia la migliore pratica per l'imposizione di annullamento/ripristino in MVVM? Ho guardato con interesse a come Daniel Vaughan lo fa nel suo progetto di Calcium; Apparentemente la miscela è stata scritta usando il pattern MVVM e si comporta esattamente come voglio la mia app, sarebbe fantastico se MS avesse spiegato come l'avevano fatto!
Ora esaminerò anche il progetto del calcio in base alla tua menzione. Grazie per quello. –
Grazie per la risposta, HiTech. Quando dici "annulla solo all'interno dei singoli controlli" intendi che, ad esempio, in un modulo (vista) con alcuni TextBox, l'utente deve concentrarsi su un TextBox in cui è stato originato un cambiamento per annullare/ripristinare qualsiasi cambiamento che ha fatto tramite quel TextBox? Separare completamente le azioni dall'interfaccia - non significherebbe vietare il binding TwoWay tra i controlli nella vista e le proprietà sul modello di vista? Sfortunatamente, la nostra app ha sia una superficie di disegno interattiva (tela) che forme come Blend/VS; è complesso Sicuramente apprezzo i tuoi pensieri! – JamesCo