2 votes

Comment modifier l'indice de tabulation d'une page à onglets lorsqu'on la pousse à partir du ViewModel ?

Je pousse TabbedPage a MasterDetailPage de ViewModel par défaut TabbedPage montrant le premier onglet sélectionné. Comment sélectionner le deuxième onglet ?

Voici mon code dans le ViewModel

async Task MoviesTab()
{
    await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(new HomePage());
    (App.Current.MainPage as MasterDetailPage).IsPresented = false;
    //var pages=new HomePage().Children.GetEnumerator();
    //pages.MoveNext();
    //new HomePage().TabIndex = 1; //Not working
}

HomePage a deux onglets définis dans le xaml

public partial class HomePage : TabbedPage

Quand on appelle MoviesTab() du menu latéral apparaît toujours dans le premier onglet sélectionné.

Modifier

Le premier scénario ne fonctionne pas et le second jette des déchets. NullReferenceExeption exeption

Scénario 1

var tabbedPaged = new TabbedPage();
tabbedPaged.TabIndex = 1;
await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(new HomePage());
(App.Current.MainPage as MasterDetailPage).IsPresented = false;

Scénario 2

await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(new HomePage());
(App.Current.MainPage as MasterDetailPage).IsPresented = false;
((App.Current.MainPage as MasterDetailPage).Detail as TabbedPage).TabIndex = 1;

enter image description here

2voto

SushiHangover Points 47109

Sauvegarder le TabbedPage à une variable locale et changer l'index de l'onglet avant de l'afficher :

var tabbedPaged = new TabbedPage();
tabbedPaged.TabIndex = 1;
await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(tabbedPaged);

Vous pouvez aussi récupérer la page de détail actuelle après l'avoir poussée en tant que détail actuel, la transformer en page à onglet, puis définir l'index :

((App.Current.MainPage as MasterDetailPage).Detail as TabbedPage).TabIndex = 1;

1voto

Edgaras Points 412

Réglage de TabIndex ne fait rien.

C'est comme ça que je navigue :

tabbedPage.CurrentPage = tabbedPage.Children.FirstOrDefault(c => c.Title == "Page Title");

Explication facultative :

Si votre page à onglet se trouve à l'intérieur d'un NavigationPage et qu'il s'agit de la première page, vous pouvez accéder à votre TabbedPage de la manière suivante :

var tabbedPage = (App.Current.MainPage as NavigationPage).RootPage as TabbedPage;

Le titre de la page est défini dans le ContentPage, vers lequel vous souhaitez naviguer.

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