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
Navigation Service
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
ViewLocatorasIDataTemplate; View-first usesViewModelLocatoron existing Views.