Ottenere ViewModelReference in un altro ViewModel
-
21-12-2019 - |
Domanda
Abbiamo un'applicazione che ha una tipica vista Master/Dettaglio.La vista principale mostra un elenco di titoli di biglietti e se fai clic sul titolo di un biglietto vedrai una vista con i dettagli del biglietto.
La vista principale ha un modello che è un elenco di oggetti "ticket", ciascuno contenente più informazioni su un ticket specifico.Abbiamo associato un gestore al clic che sostanzialmente crea un'istanza di una nuova vista di dettaglio e la visualizza.Funziona bene, tranne per il fatto che dobbiamo fornire tutti i valori di configurazione come tipi di dati primitivi al costruttore (sappiamo che non possiamo usare oggetti durante l'istanziazione)
Abbiamo pensato a un altro modo per farlo ma non siamo riusciti a farlo funzionare.In Init() (del modello di visualizzazione dettaglio) passiamo solo l'ID (del ticket cliccato) e volevamo utilizzare Mvx.Resolve per ottenere il modello di visualizzazione principale.Quindi la prima domanda sarebbe: puoi recuperare modelli di visualizzazione arbitrari all'interno di altri modelli di visualizzazione?
Una seconda idea sarebbe scrivere una classe del modello di visualizzazione di base da cui ereditano tutti i modelli di visualizzazione nella nostra app, che registri il modello di visualizzazione durante l'istanziazione in un servizio in modo che tu possa chiamare quel servizio e recuperare il modello di visualizzazione da qualsiasi luogo (modello mediatore).Sarebbe contrario al quadro?
Una risposta che ho trovato è "usa i messaggi" ma a me sembra un po' ingombrante, almeno per come l'ho capito.Il modello di visualizzazione dettaglio dovrebbe inviare un messaggio al modello di visualizzazione principale "Ok, sono pronto adesso" e quindi il modello di visualizzazione principale direbbe "Va bene, ecco la configurazione".
Quindi riassumendo le domande:
- È possibile recuperare determinati modelli di visualizzazione dal framework all'interno di altri modelli di visualizzazione?
- Implementarlo manualmente sarebbe contrario al quadro?
- Abbiamo compreso correttamente l'approccio al messaggio e, in caso negativo, quale sarebbe un modo più leggero/generico per farlo?
Saluti e grazie
Tom
Soluzione
Di solito, quando devo condividere dati tra modelli di visualizzazione, utilizzo un servizio per gestirli.Il servizio viene in genere iniettato tramite IoC.
Tratto i modelli di visualizzazione come mediatore tra i servizi e la visualizzazione.La maggior parte della mia logica è archiviata nel Servizio.Le uniche cose che ho nel modello di visualizzazione sono le proprietà per l'associazione dati, i comandi che vengono inviati a un servizio e altri problemi a livello di presentazione.
Per il tuo scenario, avrei il MasterViewModel
passare un identificatore al DetailViewModel
, dove verrà chiesto il ConfigurationService
per la configurazione tramite id.
Spero che questo ti aiuti.