Je vous recommande de lire le système de messagerie dans la boîte à outils MVVM. Cela semble être l'approche la plus simple que j'ai trouvée pour accomplir ceci.Voici un exemple de la façon dont cela fonctionne:
Si vous avez 2 modèles de vue - 1 pour les clients à la recherche, l'autre pour afficher les détails sur le client sélectionné:
Dans le premier modèle de vue, vous avez une propriété telle que ceci:
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);
}
}
Ensuite, dans le deuxième modèle de vue, vous inscrire pour recevoir des messages lorsque cette valeur change de l'autre, comme cela:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Be Assurez-vous d'appeler votre fonction registerForMessages() dans le constructeur du deuxième modèle de vue. Une autre chose qui aide est de créer une carte de sortes quand vous avez 4 ViewModels ou plus dans votre application. Je trouve qu'il est facile d'en construire un dans un fichier texte rapide dans la solution pour garder une trace de tous les messages et de ce qu'ils sont destinés à accomplir, et quels autres modèles de vue sont enregistrés pour les recevoir. L'une des choses vraiment intéressantes à ce sujet est que vous avez 1 viewmodel envoyer une notification de modification, comme la propriété customerID a changé, et immédiatement 4 autres viewmodels reçoivent cette modification et tous les changements de chargement commencent eux-mêmes.
Mes questions étaient plus liées au chargement de différentes vues. Je comprends le mécanisme de liaison avec un ViewModel. Mais où puis-je écrire du code pour afficher une nouvelle vue lorsque l'utilisateur exécute par exemple le bouton "Afficher les détails"? –