wpf prism 《2》、导航

news2024/11/15 15:33:03

在这里插入图片描述
》》》主程序

using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using Prism.Navigation.Regions;
using System;

namespace BlankApp2.ViewModels
{
    public class MainViewModel : BindableBase
    {
        private string _title = "Prism Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }
        private readonly IRegionManager _regionManager;
        //区域导航日志
        private IRegionNavigationJournal _journal;
        public DelegateCommand<string> OpenCommand { get; private set; }
        public DelegateCommand BackCommand { get; private set; }
        public MainViewModel(IRegionManager regionManager)
        {
            this._regionManager = regionManager;
            this.OpenCommand = new DelegateCommand<string>(Open);
            this.BackCommand = new DelegateCommand(Back);
        }

        private void Back()
        {
            if (_journal.CanGoBack)
            {
                _journal.GoBack();
                //_journal.GoForward();
            }
        }

        private void Open(string obj)
        {
            INavigationParameters keyValuePairs = new NavigationParameters();
            keyValuePairs.Add("zen", "====zen=============");
            _regionManager.Regions["ContentRegion"].RequestNavigate(obj, callback ,keyValuePairs);
        }

        private void callback(NavigationResult result)
        {
            if (result.Success) 
            { 
                this._journal=result.Context.NavigationService.Journal;

            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace ModuleA.ViewModels
{
    //IConfirmNavigationRequest 继承 INavigationAware 
    public class ViewAViewModel: BindableBase , IConfirmNavigationRequest
    {
        private string navValue;

        public string NavValue
        {
            get { return navValue; }
            set { 
                navValue = value;
                RaisePropertyChanged();
            }
        }

        public ViewAViewModel()
        {
            
        }

        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
        {
            //throw new NotImplementedException();
            //拦截切换导航
            bool result = false;
            if (MessageBox.Show("确认导航?","Tip:",MessageBoxButton.YesNo)==MessageBoxResult.Yes)
            {
                result = true;
            }
            continuationCallback(result);
        }

        /// <summary>
        /// 首次不触发,再次导航时,是否重用原来的实例
        /// 调用时机: 在导航发生时,Prism会询问当前实例是否应该被重用作为导航目标.
        /// IsNavigationTarget()方法用来空时视图或者视图模型实例在导航时是否被重用.
        /// 当你尝试导航到一个新的视图的时候,Prism会检查当前活动的视图或者视图模型的实例
        /// ,并调用他们的IsNavigationTarget方法,以决定是否可以重用这个实例.如果返回true,
        /// prism框架将不会创建新的视图或者视图模型实例,而是重用当前的实例.
        /// 这种方式非常适用于那些数据和状态不需要每次都重新加载的视图,可以提高应用程序的响应速度和资源利用率.
        /// </summary>
        /// <param name="navigationContext"></param>
        /// <returns></returns>
        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }
        /// <summary>
        /// 当从当前视图或者视图模型导航离开时,该方法被调用. 就是比如你从ViewC导航到ViewB的时候,
        /// 如果导航成功[ConfirmNavigationRequest],就是要打开ViewB以及离开ViewC的时候,
        /// ViewC对应的ViewCModel中的OnNavigationFrom()会被调用.
        ///作用就是允许你在视图或者视图模型不再是导航目标后执行清理或者保存状态的代码.
        ///这是保存当前视图状态或者是取消订阅事件的好地方
        /// </summary>
        /// <param name="navigationContext"></param>
        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
           //throw new NotImplementedException();
        }
        /// <summary>
        /// 导航到某个视图
        //调用时机: 当导航到某个试图或者视图模型时,该方法被调用,比如导航到ViewA的时候ViewAModel中的这个方法就会被调用.
        //作用就是允许你在视图或者是视图模型成为导航目标后执行代码.比如处理参数以及做一些初始化的工作.
        /// </summary>
        /// <param name="navigationContext"></param>
        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            if (navigationContext.Parameters.ContainsKey("zen"))
            {
                this.NavValue = navigationContext.Parameters.GetValue<string>("zen");
            }
            
            //throw new NotImplementedException();
        }
    }
}

源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构《排序》

在之前数据结构之算法复杂度章节中我们学习了复杂度相关的概念&#xff0c;这就使得懂得如何来区分算法的好坏&#xff0c;在之前C语言专题中在指针的学习时我们了解了冒泡排序&#xff0c;之后再数据结构的二叉树章节中我们又学习了堆排序&#xff0c;其实排序不止这两种&…

搜剧平台源码 可一键转存他人链接

简介 1、一键转存他人链接&#xff1a;就是将别人的分享链接转为你自己的 2、转存心悦搜剧资源&#xff1a;就是将心悦搜剧平台上的所有资源都转成你自己的 3、每日自动更新&#xff1a;自动转存每天的资源并入库 前端uin-app&#xff0c;后端PHP&#xff0c;兼容微信小程序…

基于vue框架的博物馆预约网站的设计与实现8k352(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,类别,博物馆,预约信息,馆藏精品 开题报告内容 基于Vue框架的博物馆预约网站的设计与实现开题报告 一、开题报告名称 基于Vue框架的博物馆预约网站的设计与实现 二、研究背景与意义 随着信息技术的飞速发展和人们生活水平的日益…

QT5.14.2编译有界面的DLL供C#Winform程序调用步骤

目标&#xff1a;公司要设计一套软键盘程序给到WinForm程序调用、因此需要封装QT的软键盘程序给到C#调用&#xff0c;跟C#调用MFC的DLL代码差不多&#xff0c;感觉就是封装了一下QT的代码成为MFC格式的。 步骤&#xff1a;1、新建QT对应的库项目、编译器使用MSVC2017 64位、编…

Apache RocketMQ 中文社区全新升级丨阿里云云原生 7 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码入选 2024 世界人工智能大会最高荣誉「镇…

Beyond Compare忽略特定格式文本,忽略匹配正则表达式

一 概述 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比&#xff0c;除了内容有差异外&#xff0c;自动生成的ID也不同&#xff0c;想忽略这些ID。特别是文件内容比较多的时候。 如上图&#xff0c;其中UUID“*”的部分我想忽略。 二 方法 方法1 通过Beyond Co…

开放大世界的碰撞与物理

众所周知&#xff0c;物理开销一直是 CPU 的一个大头&#xff0c;而且还很容易出问题。对于开放世界&#xff0c;该如何进行物理运算&#xff0c;以及采用什么方案计算碰撞。 本文针对这个问题做了一些细微的研究&#xff0c;算是对 Unity 下的解决方案有了一个大致的方向。 1、…

《“草莓”引领风潮:全能AI与专业型AI的未来市场较量》

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vmware下安装Rocky Linux9.4

Rocky Linux简介 Rocky Linux是一个开源、社区拥有和管理、免费的企业Linux发行版&#xff0c;提供强大的生产级平台。可作为CentOS停止维护后的替代方案。 下载Rocky Linux 下载地址 Download - Rocky Linux 根据电脑实际情况选择对应版本的Linux&#xff0c;这里下载AMD/In…

springboot在线办公小程序论文源码调试讲解

第二章 技术介绍 2.1 B/S结构 随着软件系统的不断改进和升级&#xff0c;B/S结构产品更为方便的特征体现地十分明显。对于一个中等偏大的公司来说&#xff0c;如果系统管理员每天要在很多台电脑之间来回查看&#xff0c;不断奔走&#xff0c;那么效率和工作量就会变得很低&…

HSE软件组件有哪些?如何实现HSE与主机的通信(同步/异步)?如何使用HSE提供的安全服务?

《S32G3系列芯片——Boot详解》系列——HSE软件组件有哪些&#xff1f;如何实现HSE与主机的通信&#xff08;同步/异步&#xff09;&#xff1f;如何使用HSE提供的安全服务&#xff1f; 一、HSE子系统软件组件1.1 NXP交付用户的HSE固件内容1.2 HSE固件提供的安全服务1.3 HSE固件…

代码随想录刷题day15丨110.平衡二叉树,257. 二叉树的所有路径, 404.左叶子之和 ,222.完全二叉树的节点个数

代码随想录刷题day15丨110.平衡二叉树&#xff0c;257. 二叉树的所有路径&#xff0c; 404.左叶子之和 &#xff0c;222.完全二叉树的节点个数 1.题目 1.1平衡二叉树&#xff08;优先掌握递归&#xff09; 题目链接&#xff1a;110. 平衡二叉树 - 力扣&#xff08;LeetCode&a…

探索数字沙龙——文本描述生成数字人3D发型的专业工具

一、引言 随着数字媒体创作领域不断发展,创作者们对于细节和真实感的要求越来越高。特别是在头发造型这一方面,如何准确地捕捉到人物的个性和情感,成为了3D建模和动画制作中的重要环节。为此,我们介绍了一款名为“数字沙龙”的3D头发造型工具,它旨在为数字媒体创作者提供…

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP 文章目录 前言分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP|基于鲸鱼WOA优化BP神经网络的数据分类预测Matlab程序WOA-BP 一…

系统编程-多线程1

多线程1 目录 多线程1 引入 认识线程 1、线程的概念 2、线程的优缺点 3、进程和线程的区别和联系 4、什么时候选进程&#xff0c;什么时候选线程&#xff1f; 线程相关函数 1、创建线程 2、线程的退出函数 3、阻塞等待线程退出 并回收资源 4、获取自身线程号的函数…

算法设计:实验一分治与递归

【实验目的】 深入理解分治法的算法思想&#xff0c;应用分治法解决实际的算法问题。 【实验内容与要求】 设有n2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表&#xff1a; 1.每个选手必须与其他n-1个选手各赛一次&#xff1b;2.每个选手一天只能赛一…

[Algorithm][综合训练][消减整数][最长上升子序列(二)][春游]详细讲解

目录 1.消减整数1.题目链接2.算法原理详解 && 代码实现 2.最长上升子序列(二)1.题目链接2.算法原理详解 && 代码实现 3.春游1.题目链接2.算法原理详解 && 代码实现 1.消减整数 1.题目链接 消减整数 2.算法原理详解 && 代码实现 解法&#x…

【Linux】POSIX版本 信号量

目录 信号量的基本操作 基于信号量和环形队列的生产消费模型 之前我们在System V版本的进程间通信说过信号量&#xff0c;这里我们说的是POSIX&#xff08;Portable Operating System Interface for uniX 可移植操作系统接口&#xff09;版本的并且会说的更加详细 我们之前对…

论文3解析(复现):六自由度机械臂轨迹规划研究-部分2

论文&#xff1a;六自由度机械臂轨迹规划研究&#xff0c;马强 上一篇&#xff0c;介绍了一些基础知识&#xff0c;那么接下来是这篇论文的核心部分&#xff0c;轨迹规划的事。 一般来说&#xff0c;轨迹规划有2种&#xff0c;一种是对于笛卡尔坐标系&#xff0c;一种是对于关…

nginx反向代理,负载均衡,动静分离

反向代理&#xff0c;负载均衡 nginx通常被用作后端服务器的反向代理&#xff0c;这样就可以很方便的实现动静分离以及负载均衡&#xff0c;从而大大提高服务器的处理能力。 nginx实现动静分离&#xff0c;其实就是在反向代理的时候&#xff0c;如果是静态资源&#xff0c;就…