2 votes

Communiquer entre ViewModels dans Windows Phone 7

Nous utilisons Caliburn.Micro pour une simple application Windows Phone 7 qui prend une photo d'un article particulier en stock, puis enregistre l'image et un fichier xml avec les informations saisies par l'utilisateur.

J'ai un premier écran avec un bouton à cliquer et "CameraCaptureTask" reçoit la photo, je lis la photo et l'enregistre dans le stockage mais maintenant je ne sais pas comment amener l'utilisateur à une autre vue et lui transmettre le nom du fichier et un ID unique généré dans la première vue.

J'ai essayé NavigationService.Navigate("...") avec une chaîne de requête mais je ne peux pas obtenir la chaîne de requête dans ViewModel.

Je suis confus, disons que lorsque vous faites l'assistant, comment passez-vous d'une vue à une autre - sans utiliser de singleton ou de piratage. Existe-t-il une bonne méthode pour Caliburn.Micro avec un bon exemple ?

2voto

Nigel Sampson Points 6241

Lorsque vous utilisez Caliburn Micro, il fait automatiquement correspondre les clés de la chaîne de requête aux propriétés du modèle de vue.

Par exemple, si vous naviguez vers "/Views/ProductView.xaml?Id=42", ProductViewModel.Id sera égal à 42.

1voto

Daniel Paull Points 4225

Je ne peux pas parler spécifiquement de Caliburn, mais avec le modèle M-V-VM, vos modèles de vue communiquent uniquement via des mutations vers le modèle.

Dans votre cas, je suppose que le modèle est une collection d'éléments de stock plus quelques autres informations, comme l'élément de stock actuellement sélectionné. Le fait de prendre une photo crée un nouvel élément de stock, l'ajoute à la collection, puis définit l'élément de stock actuellement sélectionné comme étant celui qui vient d'être créé.

Lorsque vous naviguez vers votre nouvelle vue, l'élément de manche actuellement sélectionné sera récupéré dans le modèle.

1voto

umar mohammed Points 11

En utilisant la méthode donnée par Nigel, cela fonctionnera. Cependant, n'oubliez pas que la propriété Id de ProductView ne sera pas définie dans le constructeur. Elle est définie dans la méthode OnActivate().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X