• Home
  • Documentation
  • Learn
Show / Hide Table of Contents
  • Introduction
  • Getting Started
    • Download and Setup Prism
    • NuGet Packages
    • Productivity Tools
  • Commanding
  • Composite Commands
  • Event Aggregator
  • ViewModelLocator
  • WPF
    • Introduction
    • Initializing
    • Managing-Dependencies
    • Modules
    • Implementing-MVVM
    • Advanced-MVVM
    • Composing-the-UI
    • Navigation
    • Communication
    • Deploying
    • Appendix-A-Glossary
    • Appendix-B-Patterns
    • Appendix-C-Prism-Library
    • Appendix-D-Extending-Prism
    • Appendix-E-Click-Once
  • Xamarin.Forms
    • Create Your First App
    • Navigation
      • Navigation Basics
      • Passing Parameters
      • Confirming Navigation
      • Deep Linking
      • Working w/ MasterDetailPages
      • Working w/ NavigationPages
      • Working w/ TabbedPages
      • XAML Navigation
    • Application Lifecycle
    • Page Lifecycle
    • Page Dialog Service
    • EventToCommandBehavior

Working with TabbedPages

Selecting the Initial Tab

When navigating to a TabbedPage, by default the selected tab displayed will always be the first Tab defined for the TabbedPage. In Prism, you could select a different tab by specifying the KnownNavigationParameters.SelectedTab constant or the "selctedTab" parameter name as a navigation parameter.

//using parameter name
_navigationService.NavigateAsync("MyTabbedPage?selectedTab=ViewA");

//using KnownNavigationParameters.SelectedTab constant
_navigationService.NavigateAsync($"MyTabbedPage?{KnownNavigationParameters.SelectedTab}=ViewA");

For tabs that are wrapped inside a NavigationPage, you do not need to change anything. The syntax is the same.

Creating Tabs at Runtime

To get started you will need to register the TabbedPage you wish to use (which can be the base Xamarin.Forms.TabbedPage), and any Views that you may wish to add as a Tab in your App's RegisterTypes method as shown below:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterForNavigation<MyTabbedPage>();
    containerRegistry.RegisterForNavigation<ViewA>();
    containerRegistry.RegisterForNavigation<ViewB>();
}

Once you have verified your pages have been registerd, you can now dynamically create tabs when navigating to a TabbedPage by using the KnownNavigationParameters.CreateTab constant or by using the "createTab" parameter name.

//using parameter name
_navigationService.NavigateAsync("MyTabbedPage?createTab=ViewA&createTab=ViewB");

//using KnownNavigationParameters.CreateTab constant
_navigationService.NavigateAsync($"MyTabbedPage?{KnownNavigationParameters.CreateTab}=ViewA&{KnownNavigationParameters.CreateTab}=ViewB");

To create a tab that wraps a page in a NavigationPage, simply denote this as a nested hierarchy using the | character.

_navigationService.NavigateAsync("MyTabbedPage?createTab=NavigationPage|ViewA");

NOTE: Dynamic tab creation is only supported from the querystring at this time, and is not supported if you were to add it to the INavigationParameters passed in to NavigateAsync. NOTE: CarouselPages are not supported

Knowing the Selected Tab

The IActiveAware interface allows you to respond to tabs being selected/unselected in a TabbedPage. When a tab is selected and it, or it's ViewModel, implements that IActiveAware interface, the IActiveAware.IsActive property is set to either true if selected, or false if not selected.

public class TabItemViewModel : BindableBase, IActiveAware
{
    // NOTE: Prism.Forms only sets IsActive, and does not do anything with the event.
    public event EventHandler IsActiveChanged;

    private bool _isActive;
    public bool IsActive
    {
        get { return _isActive; }
        set { SetProperty(ref _isActive, value, RaiseIsActiveChanged); }
    }

    protected virtual void RaiseIsActiveChanged()
    {
        IsActiveChanged?.Invoke(this, EventArgs.Empty);
    }
}
  • Edit on GitHub
  • Ask questions
  • Follow @PrismLib
  • Follow @BrianLagunas
  • Follow @DanJSiegel
Back to top Copyright 2017 Prism