Table of Contents

Migration plan

This page outlines key changes and important details to consider when migrating. It highlights what’s new, what’s changed, and any steps you need to take to ensure a smooth transition. This isn’t a full step-by-step guide but a quick reference to help you navigate the most critical parts of the migration process.

Abstractions package

Some WPF UI interfaces have been moved to a standalone package WPF-UI.Abstractions. You don't need to reference it, it will always be added automatically with WPF-UI NuGet package.

Navigation interfaces have been moved to a standalone WPF-UI.Abstractions package. This way, if you have models, views or other business services in another project, not related to WPF, you can develop them together for multiple applications.

New namespaces

INavigationAware and INavigableView have beed moved to Wpf.Ui.Abstractions.Controls namespace.

Dependency injection based page creation

IPageService have been renamed to INavigationViewPageProvider.

Its default implementation is in the new Wpf.Ui.DependencyInjection package. You just need to use the services.AddNavigationViewPageProvider() extension and then indicate in the navigation that you want to use this interface. Then NavigationView will use DI container for pages creation.

Program.cs

var builder = Host.CreateDefaultBuilder();
builder.Services.AddNavigationViewPageProvider();

MyWindow.xaml.cs

var pageProvider = serviceProvider.GetRequiredService<INavigationViewPageProvider>();

// NavigationControl is x:Name of our NavigationView defined in XAML.
NavigationControl.SetPageProviderService(pageProvider)

The INavigationService defined in the main package (WPF-UI) makes navigation management easy. You can use it for convenient injection between view models. We HIGHLY recommend it to be Singleton.

var builder = Host.CreateDefaultBuilder();
builder.Services.AddNavigationViewPageProvider();
builder.Services.AddSingleton<INavigationService, NavigationService>();