Easily implement a NavigationView!
First Add a NavigationView with your Items:
1 | <NavigationView x:Name="NavView"> |
NavigationServiceEx.NavigateTo attached property allows each NavigationViewItem to define the destination page directly in XAML. It simplifies navigation by binding menu items to specific views without requiring explicit event handlers.
then Create a new INavigationServiceEx:
1 | INavigationServiceEx navigationService; |
now you should call Initialize method with a NavigationView and Frame
1 | navigationService.Initialize(NavView, NavFrame); |
NavigateToCommand
You can use a predefined command for navigating between pages. To do this, define a CommandParameter using the NavigationParameter markup extension, specifying the target page and the BreadCrumbNavigator header (if using ConfigureBreadCrumbNavigator). Additionally, you can set a NavigationTransitionInfo to customize the transition effect.
1 | <Button Content="Navigate" Command="{x:Bind local:App.Current.NavService.NavigateToCommand}" |
Configs
there are some configure methods:
ConfigureDefaultPage
set Default page for NavigationView
1 | Initializ(...).ConfigureDefaultPage(typeof(HomeLandingsPage)); |
ConfigureSettingsPage
set Settings page for NavigationView
1 | Initializ(...).ConfigureSettingsPage(typeof(GeneralPage)); |
ConfigureBreadcrumbBar
You should have a PageDictionary like this, which you can define your pages:
1 | public Dictionary<Type, BreadcrumbPageConfig> PageDictionary = new() |
it is better to place BreadcrumbNavigator in NavigationView.Header
1 | <NavigationView.Header> |
Now Call ConfigureBreadcrumbBar method:
1 | Initializ(...).ConfigureBreadcrumbBar(BreadCrumbNav, NavigationPageMappings.PageDictionary); |
use dev:BreadcrumbNavigator.PageTitle and dev:BreadcrumbNavigator.IsHeaderVisible attached properties on your pages, for Title and Header visiblity.
Source Generator
You can simplify creating PageDictionary by installing our DevWinUI.SourceGenerator nuget package.
1.Install nuget packageInstall-Package DevWinUI.SourceGenerator
2.Just add an AdditionalFiles entry to your csproj.
1 | <ItemGroup> |
ConfigureTitleBar
you can use ConfigureTitleBar to automatically handle BackButton and PaneToggleButton
1 | Initializ(...).ConfigureTitleBar(AppTitleBar); |

Complete Codes
1 | INavigationServiceEx navigationService; |
MVVM Pattern
first register a INavigationServiceEx service:
1 | services.AddSingleton<INavigationServiceEx, NavigationServiceEx>(); |
then:
1 | public MainPage() |
INavigationAwareEx
you can use INavigationAwareEx in your ViewModel and you can access to OnNavigatedFrom and OnNavigatedTo methods.
1 | public partial class myViewModel : INavigationAwareEx |
you should set DataContext, otherwise you cant use this interface.
1 | public myViewModel ViewModel {get;} |
Notes
If you want to use Frame.GoBack to navigate back in the frame while maintaining the correct NavigationViewItem selection, you should use NavigationServiceEx.GoBack instead. This ensures that the NavigationView stays in sync with the current page.
Demo
you can run demo and see this feature.
