MvvmNavigation
February 28, 2025 · View on GitHub
Перейти на русскую страницу
This library allows you to adjust navigation behavior in your WPF and Avalonia applications and implement ViewModel-based navigation. This library completely adhere to MVVM pattern.
Contents
Usage
- Install one of these NuGet packages:
- MvvmNavigation.Wpf for WPF application
- MvvmNavigation.Avalonia for Avalonia application
-
Define navigation rules:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { var window = new MainWindow(); //1. Create navigation manager var navigationManager = new NavigationManager(window); //2. Define navigation rules: register key and corresponding view and viewmodel for it navigationManager.Register<FirstView>("FirstKey", () => new FirstViewModel(navigationManager)); navigationManager.Register<SecondView>("SecondKey", () => new SecondViewModel(navigationManager)); //3. Display start UI navigationManager.Navigate("FirstKey"); window.Show(); } } -
Сall Navigate method in your ViewModel in order to switch UI
public class FirstViewModel : ViewModelBase { private readonly INavigationManager _navigationManager; public FirstViewModel(INavigationManager navigationManager) { _navigationManager = navigationManager; } private void GoToSecondPage() { // Switch UI _navigationManager.Navigate("SecondKey"); } }Look it in a sample
Usage with Unity
MvvmNavigation supports Unity out of the box.
- Install two NuGet packages
-
Define navigation rules via UnityContainer:
public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { //1. Create Window and UnityContainer var mainWindow = new MainWindow(); var unityContainer = new UnityContainer(); //2. Register navigation manager unityContainer.RegisterNavigationManager(mainWindow); //3. Register navigation rules unityContainer.RegisterNavigationRule<FirstViewModel, FirstView>("FirstKey"); unityContainer.RegisterNavigationRule<SecondViewModel, SecondView>("SecondKey"); //4. Display start UI var navigationManager = unityContainer.Resolve<INavigationManager>(); navigationManager.Navigate("FirstKey"); window.Show(); } } -
Сall Navigate method in your ViewModel in order to switch UI
public class FirstViewModel : ViewModelBase { private readonly INavigationManager _navigationManager; public FirstViewModel(INavigationManager navigationManager) { _navigationManager = navigationManager; } private void GoToSecondPage() { // Switch UI _navigationManager.Navigate("SecondKey"); } }
Nuget package for ViewModel layer project
If you have separated project for ViewModel layer, use MvvmNavigation.Abstractions for it. It contains nessasary interfaces for navigation management such as INavigationManager.
Samples
See all samples here.