Navigation区域导航

功能实现

这里以实现按钮打开A和打开B为例

首先创建ViewA和ViewB的页面

在App.xaml.cs中实现对页面的注册

 protected override void RegisterTypes(IContainerRegistry containerRegistry)
{containerRegistry.RegisterForNavigation<ViewA>("PageA");containerRegistry.RegisterForNavigation<ViewB>();
}

在MainWindowViewModel中实现对区域内容的设置。以打开A为例,创建按钮,然后实现打开A的函数功能。

using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;namespace BlankCoreApp1.ViewModels
{public class MainWindowViewModel : BindableBase{private readonly IRegionManager regionManager;public DelegateCommand OpenACommand { get; private set; }public MainWindowViewModel(IRegionManager regionManager){OpenACommand = new DelegateCommand(OpenA);this.regionManager = regionManager;}private void OpenA(){// 设置区域内容为PageA的内容regionManager.RequestNavigate("ContentRegion", "PageA", param);}}
}

实现参数传递

创建一个ViewAViewModel.cs的类,用来实现对ViewA页面参数的传递

其中可以实现以下接口

using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Text;namespace BlankCoreApp1.ViewModels
{public class ViewAViewModel : BindableBase, INavigationAware{/// <summary>/// 判断是否需要重新创建一个新的实例/// </summary>/// <param name="navigationContext"></param>/// <returns></returns>public bool IsNavigationTarget(NavigationContext navigationContext){return true;}/// <summary>/// 导航离开当前页时触发/// </summary>/// <param name="navigationContext"></param>public void OnNavigatedFrom(NavigationContext navigationContext){}/// <summary>/// 导航完成前接收用户传递的参数以及是否允许导航等控制/// </summary>/// <param name="navigationContext"></param>public void OnNavigatedTo(NavigationContext navigationContext){}}
}

在MainWindowViewModel.cs中的OpenA函数中实现对参数的传递。这里使用NavigationParameters来创建一个param参数,使用键值对的方式把键值添加进去,使用regionManager.RequestNavigate传递参数。

private void OpenA()
{// 传递参数 通过RequestNavigate来把param参数传递过去,通过navigationContext来接收参数的值NavigationParameters param = new NavigationParameters();param.Add("Value", "Hello");// 设置区域内容为PageA的内容regionManager.RequestNavigate("ContentRegion", "PageA", param);//传递参数的另一种写法// regionManager.RequestNavigate("ContentRegion", $"PageA?Value=Hello");
}

然后通过ViewModel中的navigationContext来接收参数的值。

private string title;
public string Title
{get { return title; }set { title = value;RaisePropertyChanged(); }
}public void OnNavigatedTo(NavigationContext navigationContext)
{// 接收键值为Value的值Title = navigationContext.Parameters.GetValue<string>("Value");
}

实现弹窗提醒

使用IConfirmNavigationRequest接口来实现。在ViewAViewModel.cs中继承该类,使用其中的

ConfirmNavigationRequest方法来实现

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{bool result = true;if(MessageBox.Show("确认导航?","温馨提示",MessageBoxButton.YesNo) == MessageBoxResult.No){result =  false;}continuationCallback(result);
}

导航日志

使用IRegionNavigationJournal来实现导航日志的接口。接口实现了GoForward和GoBack方法。

在OpenA或者OpenB中使用arg调用回调函数来实现日志获取。

using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using System;namespace BlankCoreApp1.ViewModels
{public class MainWindowViewModel : BindableBase{private readonly IRegionManager regionManager;IRegionNavigationJournal journal; // 导航日志的接口public DelegateCommand OpenACommand { get; private set; }public DelegateCommand OpenBCommand { get; private set; }public DelegateCommand GoBackCommand { get; private set; }public DelegateCommand GoForwordCommand { get; private set; }public MainWindowViewModel(IRegionManager regionManager){OpenACommand = new DelegateCommand(OpenA);OpenBCommand = new DelegateCommand(OpenB);GoBackCommand = new DelegateCommand(GoBack);GoForwordCommand = new DelegateCommand(GoForword);this.regionManager = regionManager;}private void GoForword(){journal.GoForward();}private void GoBack(){journal.GoBack();}private void OpenB(){// 设置区域内容为ViewB的内容。 使用回调函数arg来拿到导航日志regionManager.RequestNavigate("ContentRegion", "ViewB", arg =>{journal = arg.Context.NavigationService.Journal;});}private void OpenA(){// 传递参数 通过RequestNavigate来把param参数传递过去,通过navigationContext来接收参数的值NavigationParameters param = new NavigationParameters();param.Add("Value", "Hello");// 设置区域内容为PageA的内容 使用回调函数arg来拿到导航日志regionManager.RequestNavigate("ContentRegion", "PageA",arg=> {journal = arg.Context.NavigationService.Journal;}, param);//传递参数的另一种写法// regionManager.RequestNavigate("ContentRegion", $"PageA?Value=Hello");}}
}

Navigation区域导航相关推荐

  1. Android系统:如何开启或隐藏Navigation Bar导航 栏

    如何开启或隐藏Navigation Bar导航栏? 如下图红色框标注的区域,就是Navigation Bar区域,它提供三个快捷方式图标,从 左到右分别是Back/Home/Recent . 第一步: ...

  2. 初识Navigation(导航)

    初识JetPack之--Navigation(导航) 关于Navigation Navigation详解 Navigation涉及的概念: 界面讲解 本文为学习类文档,通过学习B站up主longway ...

  3. [unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析

    recast navigation navmesh导航网格算法源码分析 Author:  林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 本文为了方便 ...

  4. ROS学习| navigation基本导航

    系列文章目录 ROS基础 ROS单线程与多线程 navigation基本导航 目录 系列文章目录 navigation stack简介 思维导图 navigation stack简介 ROS navi ...

  5. 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦

    [bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 ​ 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...

  6. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集

    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...

  7. bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)

    3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 121  ...

  8. Navigation跳跃导航

    Drop Height:代理跳落高度.(只能往下跳,不可往上跳).表示寻路者可以跳落的高度限. Jump Distance:代理跳跃距离.(往远处跳跃的距离). 表示寻路者的跳跃距离极限 01.勾选 ...

  9. Android Navigation Drawer(导航抽屉)

    Google I/O 2013 Android 更新了Support库,新版本的Support库中新加入了几个比较重要的功能. 添加 DrawerLayout 控件,支持创建  Navigation ...

最新文章

  1. 阿里内部不显示 P 序列职级,“高 P”光环成过去式?网友:这下可以装大佬了...
  2. 大数据、数据挖掘、机器学习三者的区别和联系
  3. c++友元函数与友元类
  4. 2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?
  5. 操作系统读写者问题实验报告_基于S3C2410微处理器和操作系统实现光电测量仿真检测系统的设计...
  6. linux centos 分区,linux centos 分区
  7. 蓝桥杯2016初赛-有奖猜谜-模拟
  8. 锐捷交换机实验案例:vlan间互访的配置与验证
  9. 用react和electron实现文件树组件(上)
  10. 查看端口占用,并解除占用
  11. linux搭建harbor与使用
  12. 计算机网络的产生与发展可分为哪四个阶段,计算机网络形成与发展大致分为如下4个阶段...
  13. python 的保留字_Python-保留字(含义)
  14. 元转万元单位换算_excel中如何将元换算成万元 excel 万单位 不要万字
  15. 针对BT防御方案——飞鱼星路由器
  16. EDA 电子设计自动化VHDL系列课程12 – 用点阵显示器 设计彩灯或动画
  17. java zhs16gbk_oracle 修改字符集 为ZHS16GBK
  18. 计算机考试照片是一寸,怎么用电脑拍照片_怎么用电脑将照片修成一寸大小
  19. 最先进的智能采茶机器人_智能采茶机器人关键技术研究
  20. 高分一号数据处理(一):数据下载

热门文章

  1. Druid密码加解密
  2. 快速制作html58nba,【PS抠图系列58】NBA球星4
  3. JAVA类与对象(三)----类定义关键字详解
  4. Educational Codeforces Round 33 (Rated for Div. 2) B题
  5. Word 公式居中 编号右对齐
  6. esxi 虚拟交换机上行链路_【热门技术】网络虚拟化的基石交换机堆叠与集群
  7. Linux卸载软件,误将系统libselinux.SO.1文件删除,导致系统命令基本无法使用的尴尬经历-----附解决方案
  8. spring初始化源码浅析之代码浅析
  9. 终于明白——区块链是个什么鬼
  10. i7 10510u和i5 8300h哪个好