Navigation区域导航
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区域导航相关推荐
- Android系统:如何开启或隐藏Navigation Bar导航 栏
如何开启或隐藏Navigation Bar导航栏? 如下图红色框标注的区域,就是Navigation Bar区域,它提供三个快捷方式图标,从 左到右分别是Back/Home/Recent . 第一步: ...
- 初识Navigation(导航)
初识JetPack之--Navigation(导航) 关于Navigation Navigation详解 Navigation涉及的概念: 界面讲解 本文为学习类文档,通过学习B站up主longway ...
- [unity3d]recast navigation navmesh 导航网格 寻路算法 源码分析
recast navigation navmesh导航网格算法源码分析 Author: 林绍川 recast navigation navmesh是unity3d ue4内置的寻路算法 本文为了方便 ...
- ROS学习| navigation基本导航
系列文章目录 ROS基础 ROS单线程与多线程 navigation基本导航 目录 系列文章目录 navigation stack简介 思维导图 navigation stack简介 ROS navi ...
- 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
[bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 121 ...
- Navigation跳跃导航
Drop Height:代理跳落高度.(只能往下跳,不可往上跳).表示寻路者可以跳落的高度限. Jump Distance:代理跳跃距离.(往远处跳跃的距离). 表示寻路者的跳跃距离极限 01.勾选 ...
- Android Navigation Drawer(导航抽屉)
Google I/O 2013 Android 更新了Support库,新版本的Support库中新加入了几个比较重要的功能. 添加 DrawerLayout 控件,支持创建 Navigation ...
最新文章
- 阿里内部不显示 P 序列职级,“高 P”光环成过去式?网友:这下可以装大佬了...
- 大数据、数据挖掘、机器学习三者的区别和联系
- c++友元函数与友元类
- 2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?
- 操作系统读写者问题实验报告_基于S3C2410微处理器和操作系统实现光电测量仿真检测系统的设计...
- linux centos 分区,linux centos 分区
- 蓝桥杯2016初赛-有奖猜谜-模拟
- 锐捷交换机实验案例:vlan间互访的配置与验证
- 用react和electron实现文件树组件(上)
- 查看端口占用,并解除占用
- linux搭建harbor与使用
- 计算机网络的产生与发展可分为哪四个阶段,计算机网络形成与发展大致分为如下4个阶段...
- python 的保留字_Python-保留字(含义)
- 元转万元单位换算_excel中如何将元换算成万元 excel 万单位 不要万字
- 针对BT防御方案——飞鱼星路由器
- EDA 电子设计自动化VHDL系列课程12 – 用点阵显示器 设计彩灯或动画
- java zhs16gbk_oracle 修改字符集 为ZHS16GBK
- 计算机考试照片是一寸,怎么用电脑拍照片_怎么用电脑将照片修成一寸大小
- 最先进的智能采茶机器人_智能采茶机器人关键技术研究
- 高分一号数据处理(一):数据下载
热门文章
- Druid密码加解密
- 快速制作html58nba,【PS抠图系列58】NBA球星4
- JAVA类与对象(三)----类定义关键字详解
- Educational Codeforces Round 33 (Rated for Div. 2) B题
- Word 公式居中 编号右对齐
- esxi 虚拟交换机上行链路_【热门技术】网络虚拟化的基石交换机堆叠与集群
- Linux卸载软件,误将系统libselinux.SO.1文件删除,导致系统命令基本无法使用的尴尬经历-----附解决方案
- spring初始化源码浅析之代码浅析
- 终于明白——区块链是个什么鬼
- i7 10510u和i5 8300h哪个好