I am passing Menu items to View from ViewModel.
Penso che tu sia molto vicino ma manca leggermente il marchio su MVVM. Non sono sicuro di quale linguaggio / quadro applichi questo, quindi risponderò genericamente. So che .NET è tipico quando ascolti MVVM ma il pattern può essere applicato ovunque.
Lasciatemi iniziare correggendo la tua affermazione iniziale:
I am passing menu ViewModels to the View.
Hai assolutamente ragione di considerare questo modello specifico della vista di una voce di menu distinto dai tuoi modelli di dominio aziendale. Assicurati di chiamarli ViewModels anziché Modelli.
Per quanto riguarda dove li metti, hai alcune opzioni. Puoi metterli nella stessa cartella dei tuoi modelli, ma nominarli distintamente come ViewModels. Puoi anche dare loro la propria directory, quindi i tuoi Modelli e ViewModels non sono mescolati. È tutta una questione di organizzazione del codice e una di queste opzioni è valida. Forse quest'ultimo (cartelle separate) è leggermente più pulito.
Nota, non ho detto da dove vengono passati ViewModels. Un modo migliore per pensare a come i modelli, i ViewModels e le viste passano l'un l'altro è descrivere dove sono stati consumati. Ciò dipende anche dal tuo framework su come le cose vengono passate (o dichiarate), ma ecco l'idea di base.
La vista può fare riferimento a un ViewModel con i dati necessari per il binding. The View non ha alcun concetto di modello di business, o almeno non funziona direttamente con uno.
ViewModel può fare riferimento a un modello. Potrebbe ottenere dati da esso, o persino invocare i metodi del modello per ricavare dati. Potrebbe anche avere una logica propria, logica che è specifica della vista rispetto al dominio specifico. Spesso è un sottoinsieme del Modello originale, con la responsabilità aggiuntiva delle preoccupazioni specifiche della vista come le date e i numeri di formattazione. ViewModel non ha bisogno di conoscere la vista e potrebbe anche essere utilizzato da più viste.
Il modello non ha alcun concetto di ViewModels o Views. È il tuo puro modello di business / oggetto di dominio. Potrebbe gestire calcoli o derivazioni di dati basati sulla logica aziendale. Non dovrebbe interessarsi a problemi di presentazione come la formattazione.
Per ulteriori letture, suggerisco la sezione intitolata The Evolution of Model-View-ViewModel in questo articolo , in particolare, gli ultimi due paragrafi di quella sezione.