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方法。
特此记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!