MVVM light Communication

3

Sto lavorando su una grande applicazione MVVM. Sto usando il MVVM light toolkit per questo. L'applicazione è come un browser Web con pulsanti Indietro e Avanti. La vista principale è un controllo utente. Ho posizionato i pulsanti Indietro e Avanti nel controllo utente della vista principale. La vista principale a sua volta ha controlli utente. L'utente controlla i cambiamenti quando si fa clic sui pulsanti Indietro e Avanti. ViewModel principale tiene traccia del controllo utente corrente e carica quello successivo a seconda del clic del pulsante.

Tutti questi controlli utente vengono caricati in base alla selezione (ID) effettuata sul primo passaggio. Diciamo, la vista principale è una schermata di ricerca e selezioniamo un cliente. Le schermate successive sono Indirizzo, Fatturazione, Richieste, ecc. Queste schermate non condividono alcun dato. Ma i dati sono per lo stesso cliente.

Quindi, è una buona pratica, per memorizzare l'ID cliente nella vista principale? Se lo faccio, dovrei avere un evento UserControl_Loaded associato a un comando, in cui richiederei l'indirizzo e le informazioni di fatturazione.

Oppure posso spostare i pulsanti (pulsanti avanti e indietro) per ciascun controllo utente invece della vista principale, passare l'ID cliente con il messaggio che caricherà la vista successiva.

Quale è meglio?

    
posta katie77 12.08.2011 - 22:55
fonte

1 risposta

2

Nel tuo CustomerViewModel principale avrei

  • Customer oggetto
  • ObservableCollection<ViewModelBase> CustomerSubViewModels
  • int CustomerSubViewModelIndex
  • BackCommand
  • ForwardCommand
  • ViewModelBase CurrentView che restituisce CustomerSubViewModels[CustomerSubViewModelIndex]

Il CustomerView principale conterrebbe un ContentControl con i suoi Content associati a CurrentView e i pulsanti Back / Forward che cambierebbero il CustomerSubViewModelIndex + - 1, che a sua volta altera pagina visualizzata in CurrentView . DataTemplates verrebbe utilizzato per definire come devono essere disegnati all'interno di ContentControl .

Le tue pagine come Addresses , Billing , Requests verrebbero tutte archiviate nella raccolta CustomerSubViewModels , e vorrei passare loro le proprietà Customer di cui hanno bisogno all'interno di CustomerViewModel . Potrebbe essere un valore come CustomerId , una proprietà come Customer.Addresses o anche l'intero oggetto Customer . Vorrei usare

    
risposta data 12.08.2011 - 23:47
fonte

Leggi altre domande sui tag