Prism导航日志
创建两个UserControl用户控件
ViewAView.xaml文件
<Grid>
<TextBlock Text="ViewA"></TextBlock>
</Grid>
ViewAViewModel.cs文件
public class ViewAViewModel: BindableBase
{
}
ViewBView.xaml文件
<Grid>
<TextBlock Text="ViewB"></TextBlock>
</Grid>
ViewBViewModel.cs文件
public class ViewBViewModel: BindableBase
{
}
MainWindow.xaml文件
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Content="ViewA" Command="{Binding OpenViewCommand}" CommandParameter="ViewAView"></Button>
<Button Content="ViewB" Command="{Binding OpenViewCommand}" CommandParameter="ViewBView"></Button>
<Button Content="Back" Command="{Binding JournalCommand}"></Button>
</StackPanel>
<ContentControl Grid.Row="1" prism:RegionManager.RegionName="RegionContent"></ContentControl>
</Grid>
MainWindowViewModel.cs文件
public class MainWindowViewModel: BindableBase
{
public DelegateCommand<string> OpenViewCommand { get; }
public DelegateCommand JournalCommand { get; }
private IRegionManager _regionManager;
private IRegionNavigationJournal _journal;
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
OpenViewCommand = new DelegateCommand<string>(Open);
JournalCommand = new DelegateCommand(JournalView);
}
/// <summary>
/// 返回上一页事件逻辑
/// </summary>
private void JournalView()
{
//是否可以返回上一页
if (_journal.CanGoBack)
{
//返回上一页
_journal.GoBack();
}
}
/// <summary>
/// 打开页面
/// </summary>
/// <param name="obj">CommandParamter传递的参数</param>
private void Open(string obj)
{
//向页面传递参数
NavigationParameters param = new NavigationParameters();
param.Add("Title", obj);
//找到RegionContent标签,向标签注入页面
_regionManager.Regions["RegionContent"].RequestNavigate(obj,
callback =>
{
//导航成功返回true
if ((bool)callback.Result)
{
//拿到导航日志
_journal = callback.Context.NavigationService.Journal;
}
}, param);
}
}
App.xaml文件
<prism:PrismApplication x:Class="PrismSimpleDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PrismSimpleDemo"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
</Application.Resources>
</prism:PrismApplication>
App.xaml文件
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>();
containerRegistry.RegisterForNavigation<ViewAView, ViewAViewModel>();
containerRegistry.RegisterForNavigation<ViewBView, ViewBViewModel>();
}
}