Comment voulez-vous changer de page dans Xamarin Forms?
Comment passez-vous d'entre les pages de Xamarin Forms? Ma page principale est un ContentPage et je ne veux pas passer à quelque chose comme un des Onglets de la Page.
J'ai été en mesure de pseudo-faire en trouvant des parents des contrôles qui doivent déclencher la nouvelle page jusqu'à trouver le ContentPage et puis d'échanger du Contenu avec des commandes pour une nouvelle page. Mais cela semble vraiment bâclée.
Grâce
Vous devez vous connecter pour publier un commentaire.
Xamarin.Forms
prend en charge plusieurs de navigation hôtes intégré:NavigationPage
, où la prochaine page de la diapositive dans,TabbedPage
, celui que vous n'aimez pasCarouselPage
, qui vous permet de changer de droite et de gauche pour next/prev pages.Sur le dessus de cela, toutes les pages prend également en charge
PushModalAsync()
qui vient de pousser une nouvelle page sur le dessus de l'existant.À la fin, si vous voulez vous assurer que l'utilisateur ne peut pas revenir à la page précédente (à l'aide d'un geste ou à l'arrière bouton matériel), vous pouvez conserver la même
Page
affiche et remplacer sesContent
.Les options suggérées de remplacer la racine de la page fonctionne aussi bien, mais vous aurez à gérer différemment pour chaque plate-forme.
Dans la classe App vous pouvez définir la page d'accueil à une Page de Navigation et de définir la page racine de votre ContentPage:
Puis dans votre premier ContentPage appel:
Android.Content.Res
pour la navigation. Qui ne semble pas être de droite, d'où puis-je importer?Si votre projet a été mis en place comme un PCL projet de formulaires (et très probable que des Formes communes en tant que bien, mais je n'ai pas essayé) il existe une classe de l'App.cs qui ressemble à ceci:
vous pouvez modifier le
GetMainPage
méthode pour renvoyer une nouvelle TabbedPaged ou une autre page que vous avez définis dans le projetPartir de là, vous pouvez ajouter des commandes ou des gestionnaires d'événements pour exécuter du code et ne
Navigation
dans cet exemple? -- Est-ce un objet que vous avez créé quelque part? -- Je ne suis pas le voir dans cet exemple de code.PushAsync()
ne fonctionne pas pour moi, alors quePushModalAsync()
n'Pousser une nouvelle page sur la pile, puis de supprimer la page en cours. Il en résulte un interrupteur.
Vous avez besoin pour être en première Page de Navigation:
De commutation de contenu n'est pas idéal que vous avez juste une grande page et un ensemble de événements de page comme OnAppearing ect.
Navigation.RemovePage();
n'est pas pris en charge sur Android.await Navigation.PushAsync(new SecondPage(),false);
Si vous ne voulez pas aller à la page précédente c'est à dire ne pas permettre à l'utilisateur de revenir à l'écran de connexion une fois que l'autorisation est fait, alors vous pouvez utiliser;
Si vous souhaitez activer la fonctionnalité, il suffit d'utiliser
Semble que ce fil est très populaire et il sera triste de ne pas mentionner ici qu'il existe une alternative -
ViewModel First Navigation
. La plupart des frameworks MVVM là à l'aide, toutefois si vous voulez comprendre de quoi il s'agit, continuer la lecture.Tous les officiels de Xamarin.Les formes de la documentation démontre un simple, mais un peu de ne pas MVVM solution. C'est parce que la
Page
(Vue) devrait ne sais rien à propos de laViewModel
et vice versa. Voici un excellent exemple de cette violation:Si vous avez un 2 pages de l'application de cette approche pourrait être bon pour vous. Toutefois, si vous travaillez sur une grande solution d'entreprise de mieux vous aller avec un
ViewModel First Navigation
approche. Il est un peu plus compliqué mais beaucoup plus propre approche qui vous permettent de naviguer entreViewModels
à la place de la navigation entre lesPages
(points de Vue). L'un des avantages à côté de claire séparation des préoccupations que vous pourriez facilement passer des paramètres à la prochaineViewModel
ou d'exécuter un code d'initialisation asynchrone à droite après la navigation. Maintenant pour les détails.(Je vais essayer de simplifier tous les exemples de code autant que possible).
1. Tout d'abord nous avons besoin d'un endroit où nous pourrions inscrire tous nos objets et éventuellement définir leur durée de vie. Pour cette question, nous pouvons utiliser un conteneur IOC, vous pouvez choisir vous-même. Dans cet exemple je vais utiliser Autofac(il est l'un des plus rapides disponibles). Nous pouvons conserver une référence dans le
App
de sorte qu'il sera disponible partout dans le monde (pas une bonne idée, mais besoin de simplification):2.Nous avons besoin d'un objet responsable de la récupération d'un
Page
(Vue) pour unViewModel
et vice versa. Le deuxième cas peut être utile dans le cas de la configuration de la racine/page principale de l'application. Pour que l'on devrait s'entendre sur une simple convention que tous lesViewModels
devrait être dansViewModels
répertoire etPages
(Vues) devrait être dans leViews
répertoire. En d'autres termesViewModels
doit vivre dans[MyApp].ViewModels
espace de noms etPages
(points de Vue) dans[MyApp].Views
espace de noms. En plus de cela, nous devons admettre queWelcomeView
(Page) devrait avoir unWelcomeViewModel
et etc. Voici un exemple de code d'un mappeur:3.Pour le cas de création d'une page racine nous aurons besoin de sorte de
ViewModelLocator
qui va définir laBindingContext
automatiquement:4.Enfin, nous avons besoin d'un
NavigationService
qui servira de supportViewModel First Navigation
approche:Comme vous pouvez le voir il y a un
BaseViewModel
- classe de base abstraite pour tous lesViewModels
où vous pouvez définir des méthodes commeInitializeAsync
qui sera exécuté juste après la navigation. Et voici un exemple de navigation:Que vous comprenez cette approche est plus complexe, plus difficile à déboguer et pourrait être source de confusion. Cependant, il existe de nombreux avantages plus vous avez réellement n'avez pas à mettre en œuvre vous-même, car la plupart du MVVM cadres de support de la boîte. L'exemple de code qui est démontré ici est disponible sur github.
Il y a beaucoup de bons articles à propos de
ViewModel First Navigation
approche et il est gratuit Enterprise Application des Modèles à l'aide de Xamarin.Les formes eBook qui explique cela et bien d'autres sujets intéressants dans le détail.À l'aide de la PushAsync() la méthode, vous pouvez pousser et PopModalAsync (), vous pouvez sauter des pages et de la navigation de la pile. Dans mon exemple de code ci-dessous j'ai une page de Navigation (Page Racine) et à partir de cette page, je pousse un contenu de la page est une page de connexion une fois que je suis complet avec ma page de connexion je pop retour à la page racine
~~~ De Navigation peut être considéré comme un dernier entré, premier sorti de la pile d'objets de la Page.Pour passer d'une page à l'autre d'une demande de pousser une nouvelle page sur cette pile. Pour revenir à la page précédente de l'application affichera la page en cours à partir de la pile. Cette navigation dans les Xamarin.Les formes sont gérées par le INavigation interface
Xamarin.Formes a un NavigationPage classe qui implémente cette interface et de gérer la pile de Pages. Le NavigationPage classe va également ajouter une barre de navigation en haut de l'écran qui affiche un titre et aura également une plate-forme appropriée bouton Retour qui sera de retour à la page précédente. Le code suivant montre comment emballer un NavigationPage autour de la première page dans une application:
De référence pour le contenu listé ci-dessus et un lien vous devez examiner pour plus d'informations sur Xamarin Forms, voir la section de Navigation:
http://developer.xamarin.com/guides/cross-platform/xamarin-forms/introduction-to-xamarin-forms/
~~~
//Code supprimé pour des raisons de simplicité uniquement le menu est affiché
Une page à une autre page de navigation dans les Xamarin.formulaires à l'aide de de Navigation propriété ci-Dessous un exemple de code
Pour naviguer d'une page à une autre page avec en vue la cellule de code ci-Dessous Xamrian.les formes
Exemple comme ci-dessous
Appel:
Créer cette méthode à l'intérieur de l'App.xaml.cs:
Lorsque vous souhaitez accéder à partir de YourPage à la page suivante, vous n':
Vous pouvez en lire plus à propos de Xamarin Formes de navigation ici: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/navigation/hierarchical
Microsoft dispose d'une assez bonne docs sur cette.
Il est aussi le plus récent concept de la
Shell
. Il permet une nouvelle façon de structurer votre application et simplifie la navigation dans certains cas.Intro: https://devblogs.microsoft.com/xamarin/shell-xamarin-forms-4-0-getting-started/
Vidéo sur les bases du Shell: https://www.youtube.com/watch?v=0y1bUAcOjZY&t=3112s
Docs: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/shell/
XAML page ajouter cette
sur le CS page