Перейти на русскую страницу
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.
- 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
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"); } }
If you have separated project for ViewModel layer, use MvvmNavigation.Abstractions for it. It contains nessasary interfaces for navigation management such as INavigationManager.
See all samples here.