• Home
  • Documentation
Show / Hide Table of Contents
  • Introduction
  • Commands
    • Commanding
    • Composite Commands
    • Async Commands
    • Error Handling
  • Dependency Injection
    • Getting Started
    • Registering Types
    • Microsoft Extensions (Supplement)
    • Platform Specific Services
    • Exception Handling
    • ContainerLocator
    • Appendix
  • Dialog Service
    • Dialog Service
    • IDialogAware ViewModels
    • IDialogWindow (WPF & Uno Platform)
  • Event Aggregator
  • Mvvm
    • BindableBase
    • ViewModelLocator
  • Modularity
    • Getting Started
    • Module Catalog
    • Module Initialization
  • Navigation
    • Getting Started
    • INavigationParameters
    • Page Navigation
    • Regions
      • Getting Started
      • Region Manager
      • Region Adapters
      • Region Behaviors
      • About Navigation in Prism
      • Basic Region Navigation
      • View/ViewModel Participation
      • Navigating to Existing Views
      • Passing Parameters
      • Confirming Navigation
      • Controlling View Lifetime
      • Navigation Journal
  • Platforms
    • Maui
      • Getting Started
      • Migrating from Prism.Forms
      • PrismAppBuilder
      • AppModel
        • IPageLifecycleAware
      • Behaviors
        • Introduction
        • BehaviorBase<T>
        • EventToCommandBehavior
        • PageBehaviorFactory
      • Dialogs
        • Getting Started
        • IPageDialogService
      • Navigation
        • Introduction
        • Page Navigation
        • NavigationBuilder
        • TabbedPages
        • Understanding the INavigationResult
        • NavigationExceptions
        • Global Navigation Observer
        • XAML Navigation
    • Uno Platform
      • Getting Started
      • Uno.Extensions
    • Wpf
      • Introduction
      • Getting Started
      • View Composition
      • Interactivity
        • Event To Command
    • Xamarin.Forms
      • Create Your First App
      • Behaviors
        • Working with Behaviors
        • EventToCommand Behavior
        • PageBehaviorFactory
      • Dialogs
        • Dialogs
        • Page Dialog Service
        • Dialog Service
        • Styling Dialogs
      • Navigation
        • Navigation Basics
        • Passing Parameters
        • Confirming Navigation
        • Deep Linking
        • Working w/ MasterDetailPages
        • Working w/ NavigationPages
        • Working w/ TabbedPages
        • XAML Navigation
      • Application Lifecycle
      • Page Lifecycle
      • Additional Platforms
        • GTK
  • Magician
    • Getting Started
  • Plugins
    • Essentials
      • Getting Started
      • ApplicationModel
        • App Context
        • Browser
        • Communication
          • Email
          • Phone Dialer
        • Data Transfer
          • Clipboard
          • Share
        • LatestVersion
        • Launcher
        • Version Tracking
      • Devices
        • Battery
        • Sensors
          • Biometrics
          • Geocoding
          • Geofencing
          • Geolocation
      • IO
        • File System
        • Stores
      • Media
        • Getting Started
        • Camera
        • Video
      • Networking
        • Connectivity
      • Notifications
        • Getting Started
        • ActionSheets
        • Alerts
        • Prompts
      • Permissions
        • Permissions Manager
      • Threading
        • Main Thread
    • Logging
      • Getting Started
      • Interop
        • Essentials
        • Microsoft Extensions
      • Providers
        • AppCenter
        • Console
        • Debug
        • Firebase
        • Graylog
        • Kochava
        • Raygun
        • Sentry
        • Unit Testing
        • Xunit
    • Observable Regions
    • Popups
  • Pipelines
    • Commercial Plus

TabbedPages

Selecting a Tab at Runtime

Sometimes you may want to programmatically switch between tabs. Keep in mind that this must be done from a ViewModel attached to one of the children of the TabbedPage or the TabbedPage itself.

var result = await navigationService.SelectTabAsync("TabB");

In the event that you have a tab which is nested inside of a NavigationPage you can select the tab:

var result = await navigationService.SelectTabAsync("NavigationPage|TabB");

Navigating to a TabbedPage

Tabbed Navigation in Prism for .NET MAUI has been significantly enhanced in Prism for Xamarin.Forms. Due to a variety of changes we suggest using a Uri to generate your TabbedPage over using a concrete type like:

<!-- Not Recommended -->
<TabbedPage>
  <view:ViewA />
  <view:ViewB />
</TabbedPage>

The recommended way to do this would be to use either a Uri:

navigationService.NavigateAsync("TabbedPage?createTab=ViewA&createTab=ViewB");

Alternatively you can use the NavigationBuilder to build your TabbedPage on the fly.

navigationService.CreateBuilder()
    .AddTabbedSegment(s => s
        .CreateTab(t => t.AddSegment<ViewAViewModel>())
        .CreateTab(t => t.AddNavigationPage().AddSegment<ViewBViewModel>())
    )
    .NavigateAsync();

This approach offers you a lot of flexibility when creating the same tabbed page over and over throughout your app as well as you can write an extension method once to consolidate this.

public static class MyNavigationExtensions
{
    public static INavigationBuilder AddMyTabbedPage(this INavigationBuilder builder, string? selectedTab = null)
    {
        return builder.AddTabbedSegment(s => 
        {
            s.CreateTab(t => t.AddSegment<ViewAViewModel>())
             .CreateTab(t => t.AddNavigationPage().AddSegment<ViewBViewModel>());
            if (!string.IsNullOrEmpty(selectedTab))
            {
                s.SelectedTab(selectedTab);
            }
        });
    }
}
Note

Prism automatically registers the .NET MAUI TabbedPage with the navigation key TabbedPage. You do not need to register your own.

  • Edit on GitHub
  • Ask questions
  • Follow @PrismLib
  • Follow @BrianLagunas
  • Follow @DanJSiegel
Back to top Copyright 2015-2024 Prism Software, LLC