Prism导航日志

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>();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值