WPF Prism框架INavigationAware接口的一个bug记录

Prism中使用INavigationAware进行页面切换的时候,需要实现IsNavigationTarget、 OnNavigatedFrom、OnNavigatedTo这三个方法,具体如下:

region INavigationAware接口方法

public bool IsNavigationTarget(NavigationContext navigationContext)
{
//是否允许重复导航进来
//返回True,则显示已实例化的页面,若无则创建
//返回false,则创建新的页面实例
return true;
}

// INavigationAware
public void OnNavigatedFrom(NavigationContext navigationContext)
{
// 从当前View导航出去的时候触发
// 在此可通过NavigationContext封装需要传递的参数
}

// INavigationAware
public void OnNavigatedTo(NavigationContext navigationContext)
{
// 打开当前View的时候触发
// 在此可通过NavigationContext解析传递过来的参数
}

endregion

OnNavigatedFrom和OnNavigatedTo分别是离开和到达当前ViewModel所对应的View页面时触发的方法,可以封装和解析传递的参数。

但是有个bug:就是在当前的ViewModel中,通过_regionManager.RequestNavigate("RegionName", "ViewName")方法进行页面切换时,若目标"ViewName"对应的页面没有或者没有实现INavigationAware的ViewNameViewModel,则_regionManager.RequestNavigate("RegionName", "ViewName")会触发当前ViewModel中的OnNavigatedTo方法;若有了实现INavigationAware的ViewNameViewModel,则会触发其中的OnNavigationTo方法。

OnNavigatedFrom方法同理,在当前的ViewModel中,通过_regionManager.RequestNavigate("RegionName", "ViewName")方法进行页面切换时,若从没有或没有实现INavigationAware的ViewNameViewModel对应的View切换至当前View时,则会触发当前ViewModel中的OnNavigatedFrom方法。

特此记录。

posted @   我亦飘零1324  阅读(11)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示