Esistono molti meccanismi di differenziazione per questo, ma per prima cosa dovresti scoprire in quale livello della tua architettura appartiene questa comunicazione.
Uno degli scopi del framework MVVM è che è possibile creare viste diverse sullo stesso modello di visualizzazione. Questi usercontrols si parlerebbero solo nella vista che stai implementando attualmente, o dovrebbero parlare tra loro in altre possibili visualizzazioni? In quest'ultimo caso, si desidera implementarlo al di sotto del livello di visualizzazione, nel viewmodel o nel modello stesso.
Un esempio del primo caso può essere se l'applicazione è in esecuzione su una superficie di visualizzazione molto piccola. Forse i tuoi controlli utente devono competere per lo spazio visivo. Se l'utente fa clic su un controllo utente per massimizzare, gli altri devono ridurre al minimo. Questo non avrebbe nulla a che fare con il viewmodel, è solo un adattamento alla tecnologia.
O forse avete diversi modelli di visuale con diversi comandi, dove le cose possono accadere senza cambiare il modello. Un esempio di questo potrebbe essere la navigazione. Hai un elenco di qualcosa e un riquadro dei dettagli con campi e pulsanti di comando collegati all'elemento selezionato nell'elenco. Potresti voler testare la logica di quali pulsanti sono abilitati per quali elementi. Il modello non riguarda l'oggetto che stai guardando, solo quando vengono premuti i pulsanti, o i campi vengono modificati.
La necessità di questa comunicazione potrebbe anche essere nel modello stesso. Forse hai dati denormalizzati che vengono aggiornati perché altri dati vengono modificati. Quindi i vari modelli di visuale che sono in azione devono cambiare a causa di increspature delle modifiche nel modello.
Quindi, per riassumere: "Dipende ...."
Potete spiegarlo in dettaglio? Intendi usare i delegati e gli eventi CLR? – Sandbox
Ho appena modificato la mia risposta aggiungendo il link alla presentazione con codice di esempio dal blog di Marlon Grech. I modelli di vista comunicano nel modello di editore/sottoscrittore (non è necessario alcun codice). Il servizio di mediazione utilizza i delegati CLR per la registrazione dei gestori di eventi. – PanJanek