MVVM - finestre secondarie e contesti dati

5

La finestra secondaria dovrebbe avere il proprio contesto dati (Modello di vista) o utilizzare il contesto dati del genitore? Più in generale, ogni View dovrebbe avere il proprio View-Model? Ci sono delle regole per guidare questa decisione? Cosa succede se i vari View-Models accederanno allo stesso modello?

Non sono stato in grado di trovare una guida coerente sulla mia domanda. La definizione MS di MVVM sembra essere silenziosa sulle finestre figlio.

Per un esempio, ho creato una vista di notifica dei messaggi di avviso. Non aveva davvero bisogno di un contesto dati da quando è stato passato il messaggio da mostrare. Ma se avessi bisogno di un po 'di fantasia, avrei toccato il contesto dei dati del genitore.

Ho eseguito un altro scenario che richiede una finestra secondaria ed è più complicato della finestra di notifica. Il modello di visualizzazione del genitore si sta già ingigantendo, quindi avevo programmato di generare una VM dedicata per la finestra secondaria. Ma non riesco a trovare alcuna indicazione se questa sia una buona idea o quali potrebbero essere le possibili conseguenze.

FWIW, mi capita di lavorare in Silverlight, ma non so che questa domanda è strettamente un problema di Silverlight.

    
posta GlenH7 10.09.2012 - 23:44
fonte

3 risposte

4

Penso che dipenda. Sul progetto al quale sto lavorando attualmente, abbiamo utilizzato entrambi gli approcci. Suppongo che dipenda dal modo in cui le funzionalità della finestra figlia sono correlate al genitore. Se la nuova finestra è per lo più supplementare, come una finestra di dialogo di prompt o secondario, ho semplicemente usato il contesto dei dati del genitore perché i dati forniti attraverso quella finestra di dialogo erano ancora molto rilevanti per la funzionalità del genitore. D'altra parte, se la nuova finestra è di per sé una caratteristica significativa, potrebbe essere più appropriato utilizzare un nuovo contesto di dati che riporta al genitore (se applicabile). Pensa in questo modo, quando si progetta una classe, quando è opportuno suddividere la funzionalità in un'altra classe? Non si vuole necessariamente un modello di visualizzazione ingombrante con una serie di funzionalità indipendenti raggruppate insieme.
Sfortunatamente, questa è diventata una risposta piuttosto confusa che dipende dal tuo miglior giudizio.

    
risposta data 11.09.2012 - 00:00
fonte
1

La regola che userei è un ViewModel per View. Se è qualcosa di molto generico, piuttosto che un Controllo piuttosto che una Vista specifica. In quel caso userebbe DataContext di parent View. Gli avvisi MessageBox possono essere visualizzati anche utilizzando una sorta di classe di servizio che si inserirà in ViewModels. ViewModels può anche avere altri ViewModels annidati in essi, ad esempio quando si utilizzano controlli di tipo Grid.

    
risposta data 11.09.2012 - 10:17
fonte
1

Mi sembra che ogni vista figlia debba avere il proprio modello di vista. Dico questo perché se tu fossi togliere la vista figlio dalla vista genitore avresti i dati ridondanti (che erano intesi per la vista figlio) seduti nel modello di visualizzazione genitore. Mi sembra che solo per questo motivo sarebbe più sensato avere un modello di vista per ciascuno.

    
risposta data 11.09.2012 - 12:02
fonte

Leggi altre domande sui tag