Questo è il modo in cui vedo (e lo faccio).
Nel tuo caso (che è piuttosto semplice), avrei un ViewModel contenente un elenco di Modelli e una proprietà SelectedModel. La vista avrebbe una forma e un elenco di corso. Il modulo sarebbe associato al modello attualmente selezionato. La vista sarebbe legata al ViewModel e indirettamente al modello (i dati nell'elenco e il modulo). Il tuo ViewModel si prenderà anche cura di convalidare e salvare i dati nel database chiamando un metodo sul tuo repository (o il contesto, che è fondamentalmente un repository, se stai usando EF).
Il modello è la tua logica aziendale, il modello di dominio. Gli oggetti qui avranno tutti i dati rilevanti per l'azienda e i metodi per manipolare tali dati. Il modello dovrebbe essere progettato per essere il più semplice possibile mentre si soddisfano le esigenze aziendali. Ciò significa relazioni normalizzate, design disaccoppiato e così via. Rendilo il più facile da mantenere possibile, indipendentemente dalla vista. Ciò significa che lo stesso modello può essere riutilizzato in diverse applicazioni (un desktop e un'app Web possono utilizzare lo stesso modello). Nel tuo caso si tratta di un oggetto con nome, indirizzo e descrizione. Questo è tutto ciò che serve per raggiungere il tuo obiettivo.
La vista non sarà sempre così semplice. A volte è necessario aggregare dati da più modelli o eseguire altre manipolazioni dei dati solo per mostrare i dati su una vista. Un report ad esempio può avere molti dati da molti modelli. Altre volte, la vista avrà davvero bisogno di semplificare un sacco di cose complesse che stanno accadendo nel modello, per darti una panoramica di alto livello senza troppi dettagli. Nel tuo caso, la vista è anche un po 'più complessa del tuo modello di dominio. Hai bisogno di un elenco per vedere tutti i tuoi modelli di dominio e un modulo per modificarne uno allo stesso tempo.
Questo è il punto in cui entra in gioco ViewModel. La VM si troverà tra il modello e la vista. Comprende un oggetto modello (o più oggetti modello), introduce nuove proprietà che sono una combinazione di altre proprietà nel modello e così via. ViewModel è progettato per semplificare la presentazione. Ciò significa proprietà semplici a cui la tua vista può legarsi e cose simili. Non importa quanto sia complesso il tuo Modello o la tua Vista, il tuo ViewModel si trova in mezzo e fa tutte le trasformazioni necessarie dei dati che vuoi mostrare. La stessa cosa, ma al contrario accade quando una vista sta inviando dati indietro (invio modulo o altro input). ViewModel è quello che trasforma i dati della vista in qualcosa che il tuo modello comprende. Nel tuo caso il ViewModel sarà piuttosto semplice, tenendo solo la lista di Modelli e un Modello Selezionato, ma in esempi più complessi, potrebbe fare alcuni calcoli o quant'altro per realizzare ciò di cui ha bisogno la vista.