Ich würde empfehlen, dass Sie auf dem Messaging-System im MVVM Light Toolkit nachlesen. Dies scheint der einfachste Ansatz zu sein, den ich gefunden habe, um dies zu erreichen.Hier ist ein Beispiel dafür, wie es funktioniert:
Wenn Sie 2 Ansicht Modelle haben - 1 für die Suche Kunden, die andere für die Anzeige Details über die ausgewählten Kunden:
Im ersten Blick Modell haben Sie eine Eigenschaft wie dies:
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);
}
}
Dann in der zweiten Ansicht Modell, registrieren Sie Nachrichten zu empfangen, wenn sich dieser Wert ändert sich von der anderen Seite, wie folgt aus:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Be Sicher, dass Sie die Funktion registerForMessages() im Konstruktor des zweiten Ansichtsmodells aufrufen. Eine andere Sache, die hilft, ist eine Karte der Art zu erstellen, wenn Sie 4 oder mehr ViewModels in Ihrer Anwendung haben. Ich finde es einfach, einen in einer schnellen Textdatei in der Lösung zu konstruieren, um alle Nachrichten zu verfolgen und was sie erreichen sollen und welche anderen Ansichtsmodelle registriert sind, um sie zu empfangen.
Eines der wirklich schönen Dinge über das ist, dass Sie 1 Änderungsmodell haben, senden Sie eine Änderungsbenachrichtigung, wie die customerID -Eigenschaft geändert, und sofort haben 4 andere Viewmodels erhalten diese Änderung und alle beginnen, Änderungen selbst zu laden.
Meine Fragen bezog sich mehr auf das Laden verschiedener Ansichten. Ich verstehe den Bindungsmechanismus mit einem ViewModel. Aber wo schreibe ich Code, um eine neue Ansicht anzuzeigen, wenn der Benutzer zum Beispiel die Schaltfläche "Details anzeigen" ausführt? –