Table of Contents

Navigation

Views are not in DI by default. Prefer ViewModel-first navigation.

ViewModel-First

NavigationHost.Content = serviceProvider.GetRequiredService<MainViewModel>();

View-First

NavigationHost.Content = new MainView(); // AutoWireViewModel="True" in XAML
public class NavigationService(ContentControl host, IServiceProvider sp)
{
    public void Navigate<TViewModel>() where TViewModel : class
        => host.Content = sp.GetRequiredService<TViewModel>();
}

Further Reading

How it works: Architecture — MVVM Wiring — ViewModel-first navigation uses ViewLocator as IDataTemplate; View-first uses ViewModelLocator on existing Views.