2011-01-17 20 views
6

Diciamo che ho un programma che deve rappresentare alcuni dati in due modi diversi . Se voglio realizzare questo avendo due ViewModels diversi, è sembra che entrambi dovrebbero condividere la stessa istanza dell'oggetto Model. Quindi come viene generalmente eseguito in MVVM con WPF?In che modo un modello viene generalmente condiviso tra oggetti ViewModel?

Un modo mi viene in mente è che i costruttori ViewModel potrebbero assumere un istanza del modello appropriato e tutto il cablaggio potrebbe essere fatto in un gestore per l'evento Application.Startup. Non ricordo di aver visto questo fatto in nessuno degli esempi che ho visto fino ad ora, ma potrei averlo appena perso.

Finora sembra come la maggior parte del tempo, gli esempi mostrano solo le ViewModels creando istanze delle classi del modello stessi, che potrebbe funzionare in alcuni casi ma non mi sembra una buona soluzione per la mia situazione, dal momento che ogni ViewModel creerebbe le proprie istanze di classi del modello. Sembra anche che come quello eliminerebbe la possibilità di sostituire il modello con uno diverso, che potrebbe essere desiderato, come nel caso del test dell'unità. Sono indovinando che un'infrastruttura per le dipendenze o un contenitore IoC eliminerebbe il problema ? Ho usato solo l'iniezione manuale delle dipendenze finora.

In un altro esempio, sembrava che la vista creata in sé gli oggetti del Modello e li passò ai ViewModels, che non sembra una grande idea sia, dal momento che la vista non dovrebbe sapere nulla del modello ?

Alcuni esempi non sembrano nemmeno avere classi Model, solo Views e ViewModels.

Ci sono modi migliori che non ho menzionato?

Inoltre, dovrei utilizzare un framework di integrazione delle dipendenze o un container IoC? Come già detto, non ne ho mai usato uno in precedenza e ho pensato che potrebbe essere l'overkill per la dimensione dei programmi su cui sto lavorando al momento. Avendo non lo davvero guardato molto pesantemente, potrei sbagliarmi.

risposta

2

L'approccio generale è passare un modello in costruttore di un modello di vista. Probabilmente, gli esempi che hai guardato non lo mostrano per semplicità. Pertanto, se si dispone di due modelli di viste che funzionano con gli stessi dati (modello), è sufficiente utilizzare la stessa istanza del modello in entrambi.

Per quanto riguarda l'iniezione delle dipendenze e i contenitori IoC, come hai detto è eccessivo per i progetti di piccole dimensioni, ma se il progetto si allarga potrebbe trarne molti vantaggi.

+3

Va bene, ma come si fa generalmente? Quale classe solitamente crea l'istanza dell'oggetto Model e la trasferisce negli oggetti ViewModel appropriati? Questa è la cosa principale di cui sono confuso al momento. – foven

-1

Devi condividere il modello: se non vuoi che i tuoi dati nell'interfaccia utente siano aggiornati tramite INotifyPropertyChanged - questa è una delle idee principali di MVVM - dovresti condividere il modello (almeno la porta pertinente per un certo ViewModel) tra ViewModels.

+1

Grazie per la risposta.So già che ho bisogno di condividere il modello, ciò di cui sono confuso è quali sono le migliori opzioni per gestirlo. In altre parole, esistono probabilmente diversi modi per fornire la stessa istanza del modello a diversi oggetti ViewModel. Mi piacerebbe sapere quali sono i modi tipici per realizzare questo e quando ciascuno è appropriato, pro/contro di ogni approccio, ecc. – foven

0

È possibile impostare un modello a livello di applicazione come classe singleton/statica. Quindi la stessa istanza è condivisa per impostazione predefinita.

Problemi correlati