当前位置: 首页 > news >正文

WPF区域导航+导航参数使用+路由守卫+导航日志

背景:使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的,不限于Prism

主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件

下面是MainViewModel:

private object body;public object Body
{get { return body; }set { body = value; RaisePropertyChanged(); }
}public DelegateCommand<string> OpenCommand { get; set; }public MainWindowViewModel()
{OpenCommand = new DelegateCommand<string>(obj =>{Body = obj switch{"ViewA" => new ViewA(),"ViewB" => new ViewB(),"ViewC" => new ViewC(),_ => Body};});
}


上面是有Mvvm框架就行了,每次打开新的模块就创建一个用户控件对象

下面是使用Prism框架的导航实现会方便一些

1.首先在App.xaml.cs中注入用户控件的依赖

2.ContentControl中的Content修改为:

<ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" />

3.MainWindowViewModel变成:

public class MainWindowViewModel : BindableBase
{private readonly IRegionManager regionManager;public DelegateCommand<string> OpenCommand { get; set; }public MainWindowViewModel(IRegionManager regionManager){OpenCommand = new DelegateCommand<string>(obj => { regionManager.Regions["ContentRegion"].RequestNavigate(obj); });this.regionManager = regionManager;}
}

-- 也就是由创建用户控件,变成调用依赖注入的用户控件

导航参数

在调用导航前设置导航参数,请求导航的时候将导航参数传递过去

NavigationParameters keys = new NavigationParameters();
keys.Add("Title", "Hello");regionManager.Regions["ContentRegion"].RequestNavigate(viewName, keys);

然后导航用户控件的ViewModel需要接口INavigationAware,接口重写方法中都是带有参数NavigationContext的,然后通过它获取导航参数就行

public void OnNavigatedTo(NavigationContext navigationContext)
{if (navigationContext.Parameters.ContainsKey("Title"))Tile = navigationContext.Parameters.GetValue<string>("Title");
}

路由守卫

需要实现路由守卫需要将原本的INavigationAware接口换成IConfirmNavigationRequest,重写的方法如果continuationCallback的值是true就给导航过去,如果没有就不给导航

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

导航日志

private IRegionNavigationJournal journal;
// 打开区域的方法
private void OpenView(string viewName)
{NavigationParameters keys = new NavigationParameters();keys.Add("Title", "Hello");// 调用完区域就记录在日志中regionManager.Regions["ContentRegion"].RequestNavigate(viewName, callBack =>{if (callBack.Cancelled){return;}journal = callBack.Context.NavigationService.Journal;}, keys);
}//返回上一页方法(让按钮绑定就行)
private void back()
{if (journal.CanGoBack)journal.GoBack();
}

相关文章:

WPF区域导航+导航参数使用+路由守卫+导航日志

背景&#xff1a;使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的&#xff0c;不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel&#xff1a; private object body;public object Body {get { retu…...

Springboot启动报错:Failed to start bean ‘documentationPluginsBootstrapper‘

在使用SpringBoot2.7时&#xff0c;由于与Swagger2的版本不兼容引发的ApplicationContextException&#xff0c;解决方法是在application.yml中配置spring.mvc.pathmatch.matching-strategy:ant_path_matcher。 org.springframework.context.ApplicationContextException: Fai…...

qt-C++笔记之动画框架(Qt Animation Framework)入门

qt-C笔记之动画框架(Qt Animation Framework)入门 code review! 在 Linux 平台上&#xff0c;使用 C 和 Qt 框架实现动画是一个非常好的选择。Qt 提供了强大的动画框架&#xff08;Qt Animation Framework&#xff09;&#xff0c;使得动画的实现变得简单高效。下面将介绍 Qt …...

C++26 函数契约(Contract)概览

文章目录 1. 什么是契约编程?契约编程的三大核心: 2. C26 契约编程的语法语法示例 3. 契约检查模式3.1. default 模式3.2. audit 模式3.3. axiom 模式检查模式的设置 4. 契约编程与传统 assert 的区别示例对比 5. 契约编程的应用场景6. 注意事项7. 示例: 带契约的矩形面积计算…...

Flink CDC 自定义函数处理 SQLServer XML类型数据 映射 doris json字段方案

Flink CDC 自定义函数处理 SQLServer XML类型数据方案 1. 背景 因业务使用SQLServer数据库&#xff0c;CDC同步到doris 数仓。对于SQLServer xml类型&#xff0c;doris没有相应的字段对应&#xff0c; 可以使用json来存储xml数据。需要进行一步转换。从 flink 自定义函数入手…...

F.interpolate函数

F.interpolate 是 PyTorch 中用于对张量&#xff08;通常是图像数据&#xff09;进行插值操作的函数&#xff0c;常用于调整张量的大小&#xff0c;例如改变图像的分辨率。它支持多种插值方法&#xff0c;包括最近邻插值、双线性插值和三次插值等。 语法 torch.nn.functional…...

华为交换机---自动备份配置到指定ftp/sftp服务器

华为交换机—自动备份配置到指定ftp服务器 需求 交换机配置修改后及时备份相关配置,每次配置变化后需要在1分钟后自动进行保存,并且将配置上传至FTP服务器;每隔30分钟,交换机自动把配置上传到FTP服务器。 1、定时保存新配置的时间间隔为*分钟(1天=1440),默认为30分钟(…...

nginx学习之路-nginx配置https服务器

文章目录 1. 生成证书2. 配置证书1. 拷贝证书文件2. 修改conf/nginx.conf文件内容 3. 查看效果1. 重载配置2. 访问 1. 生成证书 在linux系统下执行&#xff0c;使用openssl命令。&#xff08;windows环境也可以使用cmder&#xff09; # 1. 生成私钥 server2025.key(无密码保护…...

UCAS 24秋网络认证技术 CH10 SSL 复习

TLS字段、参数含义要了解每个消息是什么意思 基本方式只验证服务端&#xff0c;服务端有证书&#xff0c;变形方式加上验证客户端TLS1.3区别 协商过程 背景 Record层使用的各种加密算法参数&#xff0c;均由Handshake协议协商获得。 具体过程 随机数交换 Client/Server相互…...

【linux内核分析-存储】EXT4源码分析之“文件删除”原理【七万字超长合并版】(源码+关键细节分析)

EXT4源码分析之“文件删除”原理【七万字超长合并版】&#xff08;源码关键细节分析&#xff09;&#xff0c;详细的跟踪了ext4文件删除的核心调用链&#xff0c;分析关键函数的细节&#xff0c;解答了开篇中提出的三个核心疑问。 文章目录 提示前言全文重点索引1.源码解析1.1 …...

代码随想录 day62 第十一章 图论part11

第十一章&#xff1a;图论part11 Floyd 算法精讲 Floyd 算法代码很简单&#xff0c;但真正理解起原理 还是需要花点功夫&#xff0c;大家在看代码的时候&#xff0c;会发现 Floyd 的代码很简单&#xff0c;甚至看一眼就背下来了&#xff0c;但我为了讲清楚原理&#xff0c;本…...

springboot571基于协同过滤算法的私人诊所管理系统(论文+源码)_kaic

摘 要 随着时代的发展&#xff0c;人们的生活方式得到巨大的改变&#xff0c;从而慢慢地出现了大量私人诊所信息&#xff0c;私人诊所信息管理需要一个现代化的管理系统&#xff0c;进行私人诊所的管理。 私人诊所管理系统的开发就是为了解决私人诊所信息管理的问题&#xff0…...

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…...

vite+vue3动态引入资源文件(问题已解决但离了个大谱)

教程很详细&#xff0c;直接上代码 解决方法&#xff08;赶时间的小友理解下这函数就能解决问题了&#xff0c;就是处理了下路径&#xff0c;运气不好遇到问题再回来也不迟&#x1f923;&#x1f923;&#x1f923;&#xff09; const getSvgUrl (name) > {// name: svg_1…...

通过 4 种方式快速将音乐从 iPod 传输到 Android

概括 在 iPod 上听音乐很酷&#xff0c;但是当您拥有最新的 Android 手机时&#xff0c;也许您想在新手机上欣赏 iPod 音乐。那么&#xff0c;你的计划是什么&#xff1f;如何将音乐从 iPod 传输到 Android&#xff1f; 如果您担心这个问题&#xff0c;请看看下面的方法。他们…...

ArcGIS中怎么把数据提取到指定范围(裁剪、掩膜提取)

最近&#xff0c;经常能收到怎么把数据提取到指定范围、栅格数据怎么裁剪、矢量数据怎么裁剪、栅格数据怎么掩膜提取的咨询。 下面是我对这个问题的解决思路&#xff1a; 对于矢量数据&#xff1a; ①首先把数据加载进来 ②软件界面上面的工具栏找到→地理处理→裁剪&#x…...

【Vaadin flow 实战】第3讲-快速上手构建VaadinFlow+Springboot的全栈web项目

快速构建VaadinFlowSpringboot的全栈web项目 温馨提示&#xff0c;本文讲解比较精炼&#xff0c;主要以快速上手开发为主。 官方提供了与本文类似的教程讲解&#xff0c;地址https://vaadin.com/docs/latest/getting-started 1访问vaadin官方提供的start网站(类似于 spring i…...

HBase Cassandra的部署和操作

目录 一&#xff0e;数据库的部署与配置 二&#xff0e;使用命令访问数据库 三&#xff0e;数据库的设计 四&#xff0e;编程实现数据库的访问 一&#xff0e;数据库的部署与配置 1.在单个节点上对进行数据库的单机部署 &#xff08;1&#xff09;下载apache-cassandra-4.1.7-…...

用户界面软件01

Jens Coldewey 著&#xff0c;Tom.X 译 本文中的模式语言逐步深入地探讨用户界面架构的设计&#xff0c;它基于人机工程学&#xff0c;足以形成一套完整的体系。如果你对这方面有兴趣&#xff0c;请参考[Tog92]&#xff0c;[Coo95]和[Col95]。 本文不讨论用户界面的布局&…...

【云原生】Docker Compose 从入门到实战使用详解

目录 一、前言 二、Docker Compose 介绍 2.1 Docker Compose概述 2.2 Docker Compose特点 2.3 Docker Compose使用场景 三、Docker Compose 安装 3.1 安装docker环境 3.2 Docker Compose安装方式一 3.2.1 下载最新版 3.2.2 设置权限 3.2.3 设置软链接 3.2.4 查看版本…...

26年字节出品【AI+前端】面试高频十万字总结

2026年&#xff0c;AI浪潮正在以前所未有的速度重塑整个技术行业&#xff0c;前端开发领域首当其冲。纯粹的“增删改查”型岗位正在肉眼可见地减少&#xff0c;基础页面构建和CRUD工作AI已能完成大半&#xff0c;企业对初级岗位的需求急剧萎缩。与此同时&#xff0c;大厂对AI类…...

用LabView和STC89C52打造智能温湿度报警系统(含上位机控制)

用LabView和STC89C52打造智能温湿度报警系统&#xff08;含上位机控制&#xff09; 在智能家居和工业监控领域&#xff0c;温湿度监测一直是核心需求之一。传统的手动记录方式早已无法满足现代场景对实时性和智能化的要求。本文将带你从零构建一套完整的智能温湿度报警系统&…...

Unity学习90天-第7天-学习委托与事件(简化版)

欢迎回来&#xff01; 今天我们来搞定理解委托和事件的核心概念&#xff0c;用"受伤、得分、游戏结束"三个游戏场景掌握解耦思路&#xff01;一、为什么要用事件&#xff1f;先看"耦合"的痛点假设玩家受伤时&#xff0c;需要同时做三件事&#xff1a;、玩家…...

第一次尝试微调

一&#xff0c;什么是微调相对专业的解释就是在已完成大规模预训练&#xff08;Pre-training&#xff09;的基础模型上&#xff0c;使用特定任务、特定领域或特定格式的标注数据集&#xff0c;进行进一步的参数优化训练&#xff0c;使模型在保留通用知识与基础能力的前提下&…...

YOLO+ByteTrack路口违章抓拍实战:多目标稳定追踪与违章判定

一、项目背景与目标 路口违章抓拍是智能交通的核心应用&#xff0c;但传统方案存在两个痛点&#xff1a;一是多目标遮挡时追踪ID频繁切换&#xff0c;导致轨迹断裂&#xff1b;二是违章判定依赖复杂的硬件设备&#xff0c;部署成本高。 本文将用YOLOv11做检测ByteTrack做追踪&a…...

别再让Copilot绕过你的Security Gate!:实时拦截高危生成代码的eBPF+LLM Guard联合审查方案(已通过ISO 27001渗透验证)

第一章&#xff1a;智能代码生成与代码审查流程整合 2026奇点智能技术大会(https://ml-summit.org) 现代软件工程实践中&#xff0c;智能代码生成已不再孤立运行于开发环境边缘&#xff0c;而是深度嵌入持续集成与代码审查&#xff08;CI/CR&#xff09;主干流程。当开发者提交…...

惠普/H3C服务器iLO管理页面SSA配置详解:如何正确开启HBA模式与安装Windows系统

惠普/H3C服务器iLO管理界面SSA配置实战&#xff1a;HBA模式切换与Windows系统部署全指南 第一次接触惠普或H3C服务器的工程师&#xff0c;往往会被其独特的iLO带外管理系统和SSA存储配置工具所困扰。特别是当需要绕过硬件RAID直接使用单盘进行性能测试时&#xff0c;如何正确配…...

ESP32-WROVER-E/IE模组硬件选型与外围电路设计实战

1. ESP32-WROVER-E与ESP32-WROVER-IE模组选型指南 第一次接触ESP32-WROVER系列模组时&#xff0c;很多人会被型号后缀搞晕。其实区分E和IE版本只需要记住一个关键点&#xff1a;字母"I"代表外部天线接口。ESP32-WROVER-IE模组预留了IPEX天线座&#xff0c;而ESP32-WR…...

Apollo自定义场景(scenarios)并仿真

需求:给定一个包含自定义路径和若干障碍物的场景并在Apollo DreamView+仿真环境中仿真预测规划效果。 思路:生成apollo DreamView需要的场景配置文件,Apollo DreamView+进入PnC->Scenario_Sim中进行加载仿真。 开发环境:Apollo 11.0、Vmware Workstation 16 Pro、Ubun…...

MicroPython中断处理实战:如何避免内存分配陷阱(附代码示例)

MicroPython中断处理实战&#xff1a;如何避免内存分配陷阱&#xff08;附代码示例&#xff09; 嵌入式开发者在使用MicroPython进行硬件编程时&#xff0c;中断处理是不可或缺的核心技术。然而&#xff0c;许多开发者都曾遇到过这样的困境&#xff1a;精心设计的中断服务程序(…...