Si consiglia di consultare il sistema di messaggistica nel kit di strumenti MVVM light. Questo sembra essere l'approccio più semplice che ho trovato per realizzare questo.Ecco un esempio di come funziona:
Se avete 2 vista modelli - 1 per i clienti alla ricerca, l'altra per i dettagli di visualizzazione sul cliente selezionato:
In primo modello vista, si dispone di una proprietà come questo:
public string CustomerID
{
get
{
return _customerid;
}
set
{
if (_efolderid == value)
{
return;
}
var oldValue = _customerid;
_customerid = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged("CustomerID", oldValue, value, true);
}
}
Poi, nel secondo modello vista, è registrarsi per ricevere i messaggi quando questo valore cambia dall'altro, come questa:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Be sicuro di chiamare la funzione registerForMessages() nel costruttore del secondo modello di vista. Un'altra cosa che aiuta è creare una mappa di sorta quando hai 4 o più ViewModels nella tua applicazione. Trovo che sia facile crearne uno in un file di testo veloce nella soluzione per tenere traccia di tutti i messaggi e di ciò che sono destinati a realizzare, e quali altri modelli di vista sono registrati per riceverli.
Una delle cose veramente belle di questo è che si ha 1 viewmodel che invia una notifica di modifica, come la proprietà customerID modificata, e immediatamente 4 altri viewmodels ricevono tale modifica e tutti iniziano a caricare le modifiche da soli.
fonte
2010-07-19 22:47:43
Le mie domande erano più legate al caricamento di diverse visualizzazioni. Capisco il meccanismo di associazione con un ViewModel. Ma dove scrivo codice per mostrare una nuova vista quando l'utente esegue ad esempio il pulsante "Mostra dettagli"? –