• Home
  • Documentation
Show / Hide Table of Contents
  • Introduction
  • Getting Started
    • Download and Setup Prism
    • NuGet Packages
    • Productivity Tools
  • Commands
    • Commanding
    • Composite Commands
  • Dependency Injection
    • Getting Started
    • Registering Types
    • Platform Specific Services
    • Exception Handling
    • ContainerLocator
    • Adding a Custom Container
    • Appendix
  • Event Aggregator
  • ViewModelLocator
  • Modules
  • WPF / Uno
    • Introduction
    • Getting Started
    • Converting From Prism 7.x
    • Converting From Prism 6.x
    • View Composition
    • Region Navigation
      • About Navigation in Prism
      • Basic Region Navigation
      • View/ViewModel Participation
      • Navigating to Existing Views
      • Passing Parameters
      • Confirming Navigation
      • Controlling View Lifetime
      • Navigation Journal
    • Interactivity
      • Event To Command
    • Dialog Service
    • Advanced
      • Region Adapters
    • Legacy (Prism 6)
      • 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
  • .NET MAUI
    • Getting Started
    • Migrating from Prism.Forms
    • PrismAppBuilder
    • Dependency Injection
    • AppModel
      • IPageLifecycleAware
    • Behaviors
      • Introduction
      • BehaviorBase<T>
      • EventToCommandBehavior
      • PageBehaviorFactory
    • Dialogs
      • Getting Started
      • IPageDialogService
      • IDialogService
    • Navigation
      • Introduction
      • Page Navigation
      • NavigationBuilder
      • Understanding the INavigationResult
      • NavigationExceptions
      • Global Navigation Observer
      • XAML Navigation
    • Regions
      • Introduction
  • 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

Getting Started

When we talk about Navigation for Prism.Maui we are specifically referring to Page based Navigation. Prism.Maui actually provides 2 distinct forms of Navigation, Page based Navigation and Region based Navigation.

Comparison

Supported Navigation Types

Navigation Type .NET MAUI Prism.Maui
Page Navigation Supported Supported
Shell Navigation Supported Not Supported
Region Navigation Not Supported Supported

Shell vs Prism - What's Supported

Feature Shell Prism
Non-Modal Navigation Supported Supported
Modal Navigation Not Supported Supported
Dynamic Navigation Not Supported Supported
Navigation Interfaces Not Supported Supported
Dependency Injection *Supported Supported

* .NET MAUI Shell will support Dependency Injection provided that you have registered the View & ViewModel with the Container. Prism does require that you register the Page for Navigation, but the ViewModel can still be resolved even when the ViewModel was not registered with the Container.

What about MAUI Shell?

The Prism team has spent a lot of time reviewing the MAUI Shell. While we are happy to see many improvements that have come to Shell as a direct result of our involvement with the MAUI Team, it has been our determination that the MAUI Shell is not a good API for developers to rely on for any sort of serious application. There are serious fundamental limitations that MAUI Shell has. As a result of this and the fact that we are aware of a number of companies that have been severely burnt having to completely rebuild their application once they realized Shell would not work for them, we have decided to not support the MAUI Shell.

FAQ

Q. Isn't the Shell URI Navigation the same as Prism Navigation? A. No. Shell is an extremely poorly designed API that among other things does not clearly understand the concept of URI's and specifically URI query parameters. While Prism has a rich understanding of URI's that allows you to insert query parameters on any single Navigation segment allowing you to inject parameters that will only be provided to a single page, Shell does not have this capability. Additionally Prism natively supports the concept that you may have a single key with multiple values such as ?color=Red&color=Blue which is not supported by Shell.

Q. I need to have tabs in my application, how can I do that without using Shell? A. Xamarin.Forms has always had, and .NET MAUI continues to have a TabbedPage. The TabbedPage is easy to use, and for the purposes of Prism.Maui it isn't even something you need to create anywhere in your app as Prism will automatically register it for you for Navigation, and you can dynamically create your tabs at Runtime! This is just another thing that Shell lacks the ability to do.

Q. Are there differences in routes between Shell and Prism? A. Shell is extremely declarative meaning that you must either create the Shell Items in your Shell or register a Route and help Shell understand what that "looks like". This is a pretty significant limitation since you must constantly know every possible URI route that will be used. Additionally any scenario in which you need to modally navigate to a page, is simply not supported by Shell. Prism, on the other hand has a much more robust API that allows you to simply register your Page's for Navigation while completely ignoring the concept of "routes". Instead Prism will parse whatever URI you pass and will attempt to find the Page that corresponds with each URI segment.

Next Steps

  • Page Navigation
  • Navigation Builder
  • XAML Navigation
  • Global Navigation Observer
  • Navigation Exceptions
  • Navigation Result
  • Edit on GitHub
  • Ask questions
  • Follow @PrismLib
  • Follow @BrianLagunas
  • Follow @DanJSiegel
Back to top Copyright 2015-2022 Prism