2013-03-14 16 views
6

Quindi, se memorizzo il riferimento di ViewModel padre nel ViewModel secondario, sarà un crimine? Interromperò le regole MVVM? La vista di mio figlio è una finestra con un menu di scelta rapida. Quando viene selezionata la voce di menu appropriata, è necessario creare una nuova vista figlio. Il genitore è responsabile solo per creare la vista figlio. Quindi, mantenere un riferimento al modello di visualizzazione genitore, farà molto bene per me. Allo stesso tempo, non voglio rompere le regole del modello.dovrei memorizzare un riferimento al modello di vista genitore nel child viewmodel?

class MainViewModel 
{ 
    List<ChildViewModel> _childrenViewModels = new List<ChildViewModel>(); 

    public AddChild(ChildViewModel childViewModel) 
    { 
     _childrenViewModels.Add(childViewModel); 
     childViewModel.Owner = this; 
    } 
} 

class ChildViewModel 
{ 
    private Child _child; 
    public MainViewModel Owner { get; set; } 

    public ChildViewModel(Child child) 
    { 
     _child = child; 
    } 
} 
+1

Gli schemi sono solo una linea guida per iniziare; non piu. Solo se ti ritrovi lontano dal modello, dovresti guardare e vedere se hai scelto lo schema sbagliato. –

+0

I pattern non sono pensati per creare architettura, ma hanno lo scopo di risolvere i problemi che possono sorgere all'interno dell'architettura. Il modo più semplice per garantire l'obiettivo e l'integrità del business è la strada giusta. – Greg

+2

'Quindi se memorizzo il riferimento di ViewModel del genitore nel figlio ViewModel sarà un crimine' - Assolutamente NO. Chi vi ha detto che? È perfettamente OK che QUALSIASI ViewModel abbia un riferimento a QUALSIASI altro ViewModel (purché non contenga riferimenti a UI Elements). L'idea di MVVM è di separare la presentazione dal comportamento, non creare molte restrizioni che ti impediscono di scrivere codice pulito. –

risposta

2

La risposta è no, ma per il vostro scopo, perché avete bisogno di questo riferimento se tutto il genitore sta facendo è la creazione del ViewModel bambino. Qual è lo scopo di avere quel collegamento?

+0

Ho bisogno del riferimento perché quando l'utente seleziona una particolare voce di menu dal menu di scelta rapida della vista secondaria, dovrebbe creare una nuova finestra. Ora voglio lasciarlo alla vista genitore (principale) alla creazione di viste e finestre secondarie. Ma l'evento sta accadendo nella vista bambino. Forse potremmo anche fare il routing degli eventi? Non lo so, WPF è così grande, non importa quanti libri ho letto non riesco a ricordare tutto. Quindi sto lavorando a questo progetto per capirlo davvero. – armanali

3

NO. In generale se usi questa tecnica molte volte provi a nasconderlo dietro un'astrazione, infatti questo è quello che fa il famoso progetto Caliburn.Micro [I love it] con il suo IChild interface.

0

Sebbene questo modello non sia affatto un crimine o un "odore di codice", in molte situazioni può funzionare meglio passare un riferimento al genitore sotto forma di un implementatore di un'interfaccia, piuttosto che come una sua classe. Pertanto, solo le proprietà oi metodi a cui il bambino deve accedere nel genitore sono definiti nell'interfaccia, ma al bambino non viene dato l'accesso ad altri metodi o proprietà pubbliche della classe genitore, che potrebbero causare errori se usati per errore. Questo può comportare un po 'più di codice, ma la connessione più libera tra le classi può offrire vantaggi. Se non altro, aiuta a rendere la connessione tra bambino e genitore più autodocumentante e più facile per le persone che leggono il codice per capire.

Problemi correlati