Ho letto vari approcci per comunicare le modifiche nei dati del modello al modello di vista. Alcuni suggeriscono che il modello dovrebbe implementare, ove possibile, INotifyPropertyChanged, in modo che possa notificare il modello di visualizzazione delle proprietà modificate. Alcuni suggeriscono un livello di servizio tra modello e modello di vista, con il livello di servizio che implementa INPC, chiamate di metodo che vengono instradate attraverso questo livello di servizio al modello in modo che il livello di servizio notifichi il modello di vista.WVF MVVM: INPC e comunicazione di mediazione tra modello di vista e modello
Ritengo che quest'ultimo sia una revisione più granulare del primo e che abbia iniziato ad implementare INPC nelle mie classi modello. Sembra sbagliato perché
a) Ora devo scrivere un gestore di eventi nel mio modello di vista per le notifiche dal modello. Questo assume la forma di un lungo switch (propertyName) che imposta le proprietà corrispondenti sul modello della vista, facendo in modo che l'NPC venga nuovamente inviato verso l'alto. Mi sento come se stessi scrivendo un sacco di codice della piastra della caldaia qui.
b) Il modello di vista è ora accoppiato al mio modello tramite un gruppo di stringhe che sono regolate esclusivamente dalla convenzione e che nessuna 'interfaccia' definita. Per non parlare della difficoltà che questo causa gli IDE.
c) Il mio modello deve essere modificato per soddisfare questo contesto! E se fosse stato chiuso per qualche motivo? Ho pensato che modelli come questo fossero progettati per aumentare la riusabilità del codice & separazione delle preoccupazioni. Non solo questo, ma il codice richiesto per sparare agli eventi INPC è noioso e ripetitivo e non davvero astrattivo.
Sono davvero curioso di sapere come i professionisti di WPF affrontano questo problema, indipendentemente dalle proprietà di dipendenza, ecc. Ho la sensazione che mi manchi qualcosa. Non mi piace usare un framework come vorrebbe imparare "da zero". Sono stato via da WPF per un anno o due e lavorare con AngularJS mi ha fatto mettere in discussione i miei metodi qui.
Grazie!
A cosa ti riferisci esattamente quando dici "Modello"? Intendi gli oggetti business/classi di tipi di dati, il codice che si collega con l'origine dati o entrambi? – Sheridan
Mi riferisco ai dati e alle funzionalità aziendali. In questo caso le mie classi modello sono "Test" (proprietà come "Descrizione", "Risultato", metodi come "Esegui") e "TestPlan" con VM "TestViewModel" "TestPlanViewModel". –
Non è necessario INPC per il modello, solo il modello di visualizzazione. Questo è l'intero punto della tua VM: ho visto persone inserire l'INPC nei loro modelli, ma mi sembra che sia solo un modello di visualizzazione, piuttosto che un modello. –