Windows Template Studio WPF CodeBehind项目如何实现后台代码导航
WPF Template Studio(CodeBehind模式)带参数导航实现方案
Windows Template Studio v5.1 生成的SplitView+CodeBehind架构WPF项目,导航逻辑和UWP的静态NavigationService调用逻辑基本一致,区别仅在于导航服务默认通过依赖注入容器托管,不是全局静态类,具体实现步骤如下:
1. 获取导航服务实例发起导航
在任意需要触发导航的代码位置(页面后台、自定义控件逻辑中),通过App全局服务容器拿到INavigationService实例,调用NavigateTo方法即可,第一个参数传目标页面的完整类名,第二个参数传导航参数,和UWP传参逻辑完全一致:
using Microsoft.Extensions.DependencyInjection; // 引入项目自身命名空间、目标页面的命名空间 // 导航触发逻辑(比如按钮点击事件、业务逻辑判断分支中) var navigationService = App.Current.Services.GetService<INavigationService>(); // 等效于UWP写法:NavigationService.Navigate(typeof(destinationView), "myParam") navigationService.NavigateTo(typeof(destinationView).FullName, "myParam");
注意:不要手动new导航服务实例,必须从全局服务容器获取,否则会出现SplitView导航栏选中状态不更新、导航日志失效的问题。
2. 目标页面接收导航参数
需要接收参数的目标页面实现INavigationAware接口,在OnNavigatedTo方法中就能拿到传入的参数:
using Wpf.Ui.Common.Interfaces; using System.Windows.Controls; public partial class destinationView : Page, INavigationAware { public destinationView() { InitializeComponent(); } /// <summary> /// 页面导航到达时触发 /// </summary> /// <param name="parameter">导航传入的参数</param> public void OnNavigatedTo(object parameter) { // 做参数判空、类型校验后使用 if (parameter is string passedParam) { // 写参数处理逻辑,比如加载数据、给控件赋值 } } /// <summary> /// 页面离开时触发 /// </summary> public void OnNavigatedFrom() { // 写页面离开时的清理逻辑,比如注销事件、释放临时资源 } }
补充说明
- 导航参数支持任意
object类型,除了字符串,也可以传自定义实体类、数值类型等任意对象 - 如果需要使用导航回退功能,直接调用
navigationService.GoBack()即可,和UWP的回退逻辑一致 - 所有通过模板新增的页面,会自动注册到导航服务的页面映射表中,不需要手动额外配置
内容的提问来源于stack exchange,提问作者cdt
相关产品推荐
相关产品推荐

