在Prism框架中,IConfirmNavigationRequest是导航相关的核心接口(继承自INavigationAware),以下这四个方法是Prism导航生命周期的关键回调,用于精细控制ViewModel的导航行为。下面逐一拆解每个方法的作用、触发时机和使用场景:
先明确接口继承关系
IConfirmNavigationRequest → INavigationAware(包含 IsNavigationTarget/OnNavigatedFrom/OnNavigatedTo)也就是说:
INavigationAware是基础导航接口,定义了导航的“基础生命周期”;IConfirmNavigationRequest是增强接口,额外提供“导航确认”能力(防止意外导航)。
1. IsNavigationTarget(NavigationContext navigationContext)
核心作用
判断当前ViewModel实例是否复用,用于“导航复用”控制(Prism默认会复用ViewModel实例)。
触发时机
当导航到已存在的目标视图/ViewModel时触发(比如从A页面再次导航到已打开的B页面)。
返回值含义
true:复用当前ViewModel实例(不创建新实例,仅触发OnNavigatedTo);false:销毁当前实例,创建新的ViewModel实例。
典型场景
- 列表页→详情页→返回列表页:希望列表页保持之前的筛选/滚动状态 → 返回
true; - 每次导航到页面都需要全新数据 → 返回
false。
示例代码
// 示例:每次导航都创建新实例(不复用)publicboolIsNavigationTarget(NavigationContextnavigationContext){returnfalse;}2. OnNavigatedTo(NavigationContext navigationContext)
核心作用
导航进入当前页面/ViewModel时执行,是“页面加载后初始化数据”的核心方法。
触发时机
- 首次导航到该ViewModel(新实例创建后);
- 复用ViewModel时(
IsNavigationTarget返回true); - 从其他页面返回当前页面时。
关键能力
通过navigationContext.Parameters获取导航参数(比如从上一页传递的ID、筛选条件)。
典型场景
- 加载页面数据(如查询列表、初始化表单);
- 接收上一页传递的参数;
- 注册事件、启动定时器等。
示例代码
publicvoidOnNavigatedTo(NavigationContextnavigationContext){// 获取导航参数(比如从上一页传的PTId)if(navigationContext.Parameters.TryGetValue<int>("PTId",