Sto esaminando alcuni articoli MVVM, principalmente questo e questo .
La mia domanda specifica è: come comunico le modifiche al modello dal modello al ViewModel?
Nell'articolo di Josh, non vedo che lo faccia. Il ViewModel chiede sempre le proprietà al modello. Nell'esempio di Rachel, ha l'implementazione del modello INotifyPropertyChangede genera eventi dal modello, ma sono a disposizione della vista stessa (vedere il suo articolo / codice per maggiori dettagli sul motivo per cui lo fa).
Da nessuna parte vedo esempi in cui il modello avvisa il ViewModel delle modifiche alle proprietà del modello. Questo mi ha preoccupato che forse non è stato fatto per qualche motivo. Esiste un modello per avvisare il ViewModel delle modifiche nel modello? Sembrerebbe essere necessario poiché (1) plausibilmente ci sono più di 1 ViewModel per ogni modello e (2) anche se c'è un solo ViewModel, alcune azioni sul modello potrebbero comportare la modifica di altre proprietà.
Ho il sospetto che potrebbero esserci risposte / commenti del modulo "Perché vorresti farlo?" commenti, quindi ecco una descrizione del mio programma. Sono nuovo in MVVM quindi forse il mio intero progetto è difettoso. Lo descriverò brevemente.
Sto programmando qualcosa che è più interessante (almeno per me!) Delle classi "Cliente" o "Prodotto". Sto programmando il BlackJack.
Ho una vista che non ha alcun codice dietro e si basa solo sull'associazione a proprietà e comandi nel ViewModel (vedere l'articolo di Josh Smith).
Nel bene e nel male, ho assunto l'atteggiamento che il Modello dovrebbe contenere non solo classi come PlayingCard, Deckma anche la BlackJackGameclasse che mantiene lo stato dell'intero gioco e sa quando il giocatore è andato in rovina, il banco deve pescare le carte e qual è il punteggio attuale del giocatore e del banco (meno di 21, 21, sballo, ecc.).
Da BlackJackGameespongo metodi come "DrawCard" e mi è venuto in mente che quando viene estratta una carta, proprietà come CardScoree IsBustdovrebbero essere aggiornate e questi nuovi valori comunicati al ViewModel. Forse è un pensiero sbagliato?
Si potrebbe assumere l'atteggiamento che ViewModel abbia chiamato il DrawCard()metodo, quindi dovrebbe sapere di chiedere un punteggio aggiornato e scoprire se è fallito o meno. Opinioni?
Nel mio ViewModel, ho la logica per prendere un'immagine reale di una carta da gioco (basata su seme, grado) e renderla disponibile per la visualizzazione. Il modello non dovrebbe preoccuparsi di questo (forse altri ViewModel userebbero solo i numeri invece delle immagini delle carte da gioco). Certo, forse qualcuno mi dirà che il Model non dovrebbe nemmeno avere il concetto di un gioco di BlackJack e che dovrebbe essere gestito nel ViewModel?
OnBuste la VM può sottoscriverlo. Immagino che potresti anche utilizzare un approccio IEA.