install-package prism.core;
install-package Prism.DryIoc;
install-package prism.wpf;
//app.xaml
<prism:PrismApplication
x:Class="WpfApp31.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/">
<!--<Application.Resources>
</Application.Resources>-->
</prism:PrismApplication>
//App.cs
using System.Windows;
using Prism.DryIoc;
namespace WpfApp31
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return new MainWindow();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<ViewA>("ViewA");
containerRegistry.RegisterForNavigation<ViewB>("ViewB");
containerRegistry.RegisterForNavigation<ViewC>("ViewC");
}
}
}
//MainWindow.xaml
<Window x:Class="WpfApp31.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
xmlns:local="clr-namespace:WpfApp31"
mc:Ignorable="d"
WindowState="Maximized"
Title="MainWindow" Height="450" Width="800"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0">
<Button Content="View A"
Margin="5"
Command="{Binding NavigateCommand}"
CommandParameter="ViewA"/>
<Button Content="View B"
Margin="5"
Command="{Binding NavigateCommand}"
CommandParameter="ViewB"/>
<Button Content="View C"
Margin="5"
Command="{Binding NavigateCommand}"
CommandParameter="ViewC"/>
</StackPanel>
<ContentControl prism:RegionManager.RegionName="MainRegion"
Grid.Row="1"/>
</Grid>
</Window>
//MainWindowViewModel.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace WpfApp31
{
public class MainWindowViewModel:BindableBase
{
private readonly IRegionManager _regionManager;
public DelegateCommand<string> NavigateCommand { get; private set; }
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string navPath)
{
_regionManager.RequestNavigate("MainRegion", navPath, navigationResult =>
{
if(!navigationResult.Success)
{
var error = navigationResult.Exception;
MessageBox.Show(error?.ToString());
}
});
var parameters = new NavigationParameters();
parameters.Add("id", 123);
_regionManager.RequestNavigate("MainRegion", navPath, parameters);
}
}
}
//ViewA.xaml
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace WpfApp31
{
/// <summary>
/// Interaction logic for ViewA.xaml
/// </summary>
public partial class ViewA :UserControl
{
public ViewA()
{
InitializeComponent();
}
}
}
//ViewAViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prism.Mvvm;
namespace WpfApp31
{
public class ViewAViewModel : BindableBase, INavigationAware
{
private string msg;
public string Msg
{
get
{
return msg;
}
set
{
SetProperty(ref msg, value);
}
}
public ViewAViewModel()
{
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
if(navigationContext.Parameters.TryGetValue("id",out int id))
{
Msg=$"Received ID:{id}";
}
}
}
}
//viewB.xaml
<UserControl x:Class="WpfApp31.ViewB"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp31"
mc:Ignorable="d"
xmlns:prism="http://prismlibrary.com/"
Height="450" Width="800">
<Grid>
<TextBlock Text="View B"
FontSize="200"/>
</Grid>
</UserControl>
//ViewBViewModel.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Prism.Mvvm;
namespace WpfApp31
{
public class ViewBViewModel : BindableBase, INavigationAware
{
private string msg;
public string Msg
{
get
{
return msg;
}
set
{
SetProperty(ref msg, value);
}
}
public ViewBViewModel()
{
Msg="Default Msg";
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
if(navigationContext.Parameters.ContainsKey("msg"))
{
Msg=navigationContext.Parameters.GetValue<string>("msg");
}
}
}
}
![image]()
![image]()
![image]()