Sono fortemente in disaccordo con il concetto secondo cui il Modello non dovrebbe implementare INotifyPropertyChanged
. Questa interfaccia non è specifica dell'interfaccia utente! Informa semplicemente di un cambiamento. In effetti, WPF lo utilizza pesantemente per identificare le modifiche, ma ciò non significa che sia un'interfaccia utente. Lo confronterei con il seguente commento: " Una gomma è un accessorio per auto ". Certo che lo è, ma lo usano anche biciclette, autobus, ecc. In sintesi, non prendere quell'interfaccia come una cosa dell'interfaccia utente.
Detto questo, ciò non significa necessariamente che ritengo che il Modello debba fornire notifiche. In effetti, come regola generale, il modello non dovrebbe implementare questa interfaccia, a meno che non sia necessario. Nella maggior parte dei casi in cui i dati del server non vengono trasferiti all'app client, il modello può essere obsoleto. Ma se ascolto i dati del mercato finanziario, non vedo perché il modello non possa implementare l'interfaccia. Ad esempio, cosa succede se ho una logica non UI come un servizio che quando riceve un prezzo Bid o Ask per un determinato valore emette un avviso (ad es. Tramite un'e-mail) o effettua un ordine? Questa potrebbe essere una possibile soluzione pulita.
Tuttavia, ci sono diversi modi per raggiungere le cose, ma vorrei sempre discutere a favore della semplicità ed evitare la ridondanza.
Cos'è meglio? Definizione di eventi in una raccolta o modifiche delle proprietà sul modello di vista e propagazione al modello o con l'aggiornamento della vista intrinsecamente il modello (tramite il modello di vista)?
La linea di fondo ogni volta che vedi qualcuno che afferma che " non puoi fare questo o quello " è un segno che non sanno di cosa stanno parlando.
Dipende molto dal tuo caso e in effetti MVVM è un framework con molti problemi e devo ancora vedere un'implementazione comune di MVVM su tutta la linea.
Vorrei avere più tempo per spiegare i molti gusti di MVVM e alcune soluzioni ai problemi più comuni, per lo più forniti da altri sviluppatori, ma credo che dovrò farlo un'altra volta.