Stiamo costruendo un'app utilizzando lo schema MVVM, abbiamo controller che collegano tutte le viste e i modelli di visualizzazione usando DI. Tutti gli esempi di MVVM che ho visto sono davvero semplicistici e hanno 1 vista. Come/dovrebbero i modelli di vista rispondere al controller? Il controller conosce i modelli e le visualizzazioni, nel caso il viewmodel dovesse inviare eventi al controller? Dove dovrebbe accadere un salvataggio? Modello? Controllore?Controller in MVVM, Come ottenere informazioni da viewmodel al suo controller?
risposta
Utilizziamo anche controller, ma nel nostro caso sono responsabili del flusso di lavoro dell'applicazione. Il Controller conosce ViewModel e il Modello ma non la Vista concreta perché verrà iniettata dal Contenitore IoC.
Se siete interessati a un esempio che mostra più di una sola interfaccia utente (finestra di dialogo modale, procedura guidata con il flusso di lavoro subordinato) allora si potrebbe avere uno sguardo a:
WPF Application Framework (WAF) - http://waf.codeplex.com
Il ViewModel potrebbe non essere dipendente da un IController o da un'altra interfaccia, in modo che possano rispondere ad esso? Cerco di mantenere il più possibile la logica applicativa del ViewModel, in quanto queste classi possono facilmente diventare gonfie.
MyViewModel(IController controller)
{
this.controller = controller;
}
void Save()
{
this.controller.Save();
}
Sono d'accordo che i quadri MVVM tendono ad essere troppo semplicistica con i loro campioni. In particolare, spostarmi tra viste/schermate nella tua applicazione è qualcosa che mi piacerebbe vedere più esempi di. Creo un'interfaccia IViewManager, per consentire a ViewModels di richiedere che ci spostiamo su un'altra vista.
Bene il controllore sa circa il ViewModel, non vogliamo una dipendenza 2 modo accadendo o la possibilità che un ViewModel il mio essere riutilizzato da un altro controllore. – nportelli
Hmmmm, non sono del tutto sicuro di capire quale schema stai usando. Stai dicendo che hai un controller per visualizzazione? Non è più MVC che MVVM? Forse potresti aggiungere un po 'di codice di esempio alla tua domanda per mostrare come crei una vista e un modello di vista. –
Un controller per visualizzazione no, un controller per caso d'uso. Scusa se non l'ho chiarito. – nportelli
Io uso una configurazione simile a voi. Nel mio controller, dove il mio DI e l'iniezione della vista si interrompono, a volte mantengo il riferimento al ViewModel (che mantiene la vista). Alcuni casi posso avere un evento sul VM che viene gestito dal controller. In altri casi estremi (come se la VM/V fosse stata creata al di fuori del controller, ad esempio in un'altra VM), potrei persino usare l'EventAggregator (con un forte riferimento) per ascoltare gli eventi che potrebbero essere attivati sulla VM. In tal caso, non è necessario un riferimento memorizzato alla VM.
Il nostro controller non conosce la VM. Semplicemente e interfaccia con la vista. La VM viene iniettata da lì. L'idea è che il controller non sia a conoscenza del modello implementato dall'interfaccia utente, quindi possiamo potenzialmente sostituire facilmente l'interfaccia utente. Penso che ciò porti ai nostri problemi. – nportelli
Come utilizzare gli eventi in cui il controllore si iscrive agli eventi VM o utilizzando un modello di mediatore in cui un mediatore viene iniettato in una VM.
Nel caso di un'applicazione che ha più moduli e richiede la separazione delle preoccupazioni, raccomanderei l'uso di framework prism.
- 1. Come passare un intero ViewModel al controller
- 2. MVC 4 ViewModel non viene rinviato al controller
- 3. MVC3 Passa ViewModel al metodo controller usando JQuery Ajax
- 4. Prism2/MVVM Chiudi vista da ViewModel
- 5. Passing informazioni tra controller in ASP.Net MVC-
- 6. Come accedere al controller mvc nel controller web api per ottenere il pdf dalla vista
- 7. Come ottenere l'ID elemento generato da Emberjs nel controller
- 8. Come ottenere useragent nel controller Magento?
- 9. come ottenere getServletContext() in primavera controller mvc
- 10. Controller -> Servizio -> Repository: servizio map Entity to ViewModel?
- 11. Come posso ottenere il RootViewController da un controller spinto?
- 12. Passare KeyEventArgs su ViewModel da View in WPF (MVVM)
- 13. Come ottenere la risposta di un controller da un altro controller?
- 14. MVVM Pattern, ViewModel DataContext domanda
- 15. Informazioni sull'integrazione delle dipendenze nei controller AngularJS
- 16. Come accedere a applicationContext da un controller
- 17. in un controller in asp.net-mvc come posso ottenere informazioni sul browser degli utenti?
- 18. impostazione servizio al controller figlio
- 19. Come reindirizzare da OnActionExecuting in Base Controller?
- 20. Come ottenere valore da FlexForm a Controller [Typo3]
- 21. Come posso ottenere dati dal controller a molla da ajax?
- 22. Come ottenere il testo di errore nel controller da BindingResult
- 23. codeigniter reindirizza al controller diverso
- 24. Ho bisogno di un controller di visualizzazione per MVVM-light in Silverlight?
- 25. Come disattivare i parametri da un controller?
- 26. AngularJS - Come costanti modulo da un controller
- 27. Qual è la differenza tra ViewModel e Controller?
- 28. Come passare le informazioni da Visualizza a ViewModel con DelegateCommand?
- 29. Posso ottenere il controller in esecuzione corrente da HttpContext?
- 30. Come passare il parametro dal controller al layout in YII2
Ya stiamo facendo le cose al contrario. Il nostro controller conosce un'interfaccia vista e inietta il viewmodel e il modello. – nportelli