Principalmente lavoro con. Applicazioni WVF MVVM. Ho usato diversi framework, MVVM Light, Prism, ecc. E sono stato in grado di interrompere l'implementazione di CRUD MVVM in tre scenari.
Scenario 1: Un servizio Web restituisce una raccolta di piccoli oggetti senza proprietà di navigazione, vado su questi avvolgendoli con DetailVM, a causa dell'altra logica necessaria, e lo metto in un ListCollectionView . My DetailVM implementa IEditableObject, ora ogni operazione di Crud che voglio fare può essere fatta tramite ListCollectionView, e posso mantenere il mio ListView nell'interfaccia utente in sincronia con l'operazione CRUD corrente. Vale a dire, se l'utente aggiunge un elemento, viene immediatamente aggiunto a ListCollectionView e riflesso nell'interfaccia utente e, se annullano la modifica, viene rimosso. Se salvano l'elemento aggiunto, rimane nell'elenco e viene mantenuto sul server. Tutto questo può essere fatto con due semplici modelli di visualizzazione e alcuni modelli di dati, grazie a IEditableObject e ListCollectionView.
2 & 3: Questi sono più complessi, perché la chiamata iniziale al servizio web restituisce un elenco di riferimento dto contenente alcune proprietà semplici come Name & Id.
Scenario 2: nella chiamata MasterViewModel al servizio Web e caricamento di modelli rapidi. Quando viene selezionato un elemento, viene eseguita una seconda chiamata al servizio Web per recuperare l'oggetto effettivo e il relativo grafico dell'oggetto. Questo viene quindi mappato e messaged (pub / sub) su un modello di vista dettaglio separato.
Scenario 3: su MasterViewModel ha una proprietà DetailViewModel. Questo accoppia i modelli di vista insieme, il che sembra giusto in quanto essi non possono davvero funzionare l'uno senza l'altro. La gestione dell'elenco diventa più semplice poiché le cose si trovano tutte nello stesso punto, nessun messaggio ... È ancora difficile ottenere ciò che è così semplice con ListCollectionView, ma posso farlo senza messaggistica tra i modelli di visualizzazione.
----- Summary ------
Scenario 1 = Facile da implementare, funziona bene richiede un codice minimo.
Scenario 2 & 3 = Più difficile da implementare, diventa un po 'meno chiaro dove dovrebbero essere tutte le operazioni CRUD. Mantenere gli elementi nell'elenco di riferimento in sincronizzazione è più difficile. Aggiorno le informazioni nell'elenco solo quando una modifica è stata completata correttamente e salvata sul servizio web.
Attualmente tengo tutte le mie operazioni di crude in un modello di vista. Ho creato un modello di vista di base per i dati paginati, che eredito in una base del modello di visualizzazione CRUD e aggiungo i comandi per Aggiungi, Modifica, Rimuovi, & Annulla. Finora questo ha funzionato bene.