9
votes

Dialogue mvvmcross

Je cherche actuellement toutes les solutions possibles pour pouvoir informer l'utilisateur, c'est-à-dire POP une boîte de dialogue, lorsqu'il y a une décision qu'il doit faire. Ceci est un problème courant avec le modèle MVVM et j'essaie de le résoudre pour le cadre MVVMCross.

Les solutions possibles pourraient être:

  • Personnalisez le MVXPRESENTER pour pouvoir afficher des dialogues, mais cela a l'air un peu laids pour moi
  • Mettez une interface de dialogue dans le projet de base et utilisez l'inversion du contrôle pour injecter la mise en œuvre du projet UI au projet Core
  • Utilisez le plugin MVXMessenger et partagez des messages entre le projet Core et UI. Cela ressemble à une bonne idée mais peut-être plus compliqué à développer ...

    Que suggéreriez-vous?


1 commentaires

Si votre deuxième solution est une chose comme celle-ci Stackoverflow.com/Questtions/3801681/... - J'irais avec toi :)


3 Réponses :


15
votes

La boîte de dialogue est un sujet intéressant qui ne convient pas toujours à l'écoulement de la liaison de données MVVM.

En règle générale, certains cas de dialogues sont pour des choses comme:

  1. Ajout d'une option de confirmation Oui / Non à un bouton Soumettre
  2. demandant une entrée unique supplémentaire - par ex. une sélection d'une liste
  3. Offrir un choix d'actions (par exemple supprimer, éditer ou dupliquer?)
  4. Offrir un message de confirmation
  5. demandant une entrée complexe supplémentaire - par exemple Collecte d'un ensemble de prénom / lastname / Age / Accept_Terms Champ

    Pour certains de ces articles, je suggérerais que celles-ci pouvaient principalement être modélisées comme des préoccupations purement visualisées. Par exemple, la demande de sélection d'éléments simples est couramment effectuée à partir d'étiquettes de commande composées qui affichent des «ramasseurs» lors de la prise en taraudement - par exemple. Comme un MVXSpinner dans HTTPS : //github.com/slodulation/mvvmcross-Tutorials/blob/master/apiexamples/apiexamples.droid/resources/layout/test_spinner.axml#l16

    Pour les cas généraux, où vous voulez Les illustrations partagées pour piloter le flux d'utilisateurs, les options disponibles dans MVVMcross incluent la liste 3 que vous listez, toutes qui semblent viables pour moi, mais je conviens qu'aucun d'entre eux n'est parfait.

    comme un supplémentaire Suggestion, une belle suggestion architecturale provient de l'équipe de modèles et de pratiques de Microsoft. Dans http://msdn.microsoft.com/fr -us / bibliothèque / gg405494 (v = pandp.40) .aspx , ils suggèrent une interface iinterAdAcAdReQuest qui peut être utilisée dans la liaison de données, en particulier pour ce type de situation.

    Leur implémentation de référence de ceci est la suivante: xxx

    Un exemple de vision de cette option est: xxx

    et Le point de vue peut collecter cette utilisation: xxx

    confirmation est une classe simple comme: xxx < p> Pour utiliser ceci dans les vues:

    Le lien MSDN indique comment un client XAML peut se lier à cela à l'aide de comportements - donc je ne couvrirai donc pas cela plus loin ici.

    in iOS Pour MVVMCross, un objet d'affichage pourrait implémenter une propriété comme: xxx

    cette propriété de vue utilise un abonnement affectement -Based événement afin de canaliser la fenêtre Code> Soulevez Événements à une vue MessageBox -Trace de type. Il est important d'utiliser un affaiblie de sorte que la vue de la vue n'a jamais référence à la vue - celles-ci peuvent causer des problèmes de fuite de mémoire dans xamarin.ios. Le MessageBox -Type serait assez simple - quelque chose comme: xxx

    et la propriété pourrait être liée à un jeu de liaison fluide comme: xxx

    pour Android, une implémentation similaire pourrait être utilisée - cela pourrait peut-être utiliser un dialogue et pourrait peut-être aussi être liée à l'aide d'une vue dans XML.

    Note:

    • Je crois que l'interaction de base pourrait être améliorée (à mon avis) si nous avons ajouté plus d'informations iinterAdActionAquest et InterActionEquesseventargs Définitions - mais pour le Portée de cette réponse, j'ai gardé à la mise en œuvre de la «base» qui se conserve aussi près que possible à celui présenté dans http://msdn.microsoft.com/en-us/library/ggg405494 (v = pandp.40) .aspx
    • Certaines classes d'assistance supplémentaires pourraient également aider à simplifier de manière significative le code d'abonnement de vue trop

0 commentaires

7
votes

Vous venez d'utiliser plug-in MVVMcross UserAction de Brian Chance


0 commentaires

3
votes

Comme Eugene dit, utilisez le plug-in UserPortAction. Malheureusement, il n'y a pas d'implémentation sur le téléphone Windows, voici le code que j'ai utilisé dans l'intervalle:

Mvx.RegisterSingleton<IUserInteraction>(new WindowsPhoneUserInteraction());


0 commentaires