首页 > 其他分享 >WPF Prism框架INavigationAware接口的一个bug记录

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

时间:2025-01-14 10:59:40浏览次数:1  
标签:ViewModel Prism View WPF INavigationAware OnNavigatedFrom NavigationContext 页面

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方法。

特此记录。

标签:ViewModel,Prism,View,WPF,INavigationAware,OnNavigatedFrom,NavigationContext,页面
From: https://www.cnblogs.com/hexatry63/p/18670374

相关文章

  • 一个超经典 WinForm,WPF 卡死问题的终极反思
    一:背景1.讲故事写这篇文章起源于训练营里一位朋友最近在微信聊到他对这个问题使用了一种非常切实可行,简单粗暴的方式,并且也成功解决了公司里几个这样的卡死dump,如今在公司已是灵魂级人物,让我也尝到了什么叫反哺!对,这个东西叫Harmony,github网址:https://github.com/pardeike/H......
  • WPF ListBox ItemTemplate DataTemplate
    <Windowx:Class="WpfApp137.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF ListBoxItem ControlTemplate
    <Windowx:Class="WpfApp136.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • wpf mvvm(prism)
     mainwindow.xml.cspublicpartialclassMainWindow:MetroWindow{privatereadonlyIRegionManagerregionManager;publicMainWindow(IRegionManagerregionManager){InitializeComponent();this.regionManager=regionMana......
  • wpf 打包成单文件
     FolderProfile.pubxml<Project><PropertyGroup><TargetFramework>net6.0-windows7.0</TargetFramework><PublishSingleFile>true</PublishSingleFile> <Configuration>Release</Configuration> <I......
  • WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能
    前言:我在迁移旧项目代码的时候发现别人写很多界面都涉及到一个DataGrid的全选,但是每个都写的很混乱,现在刚好空闲下来,写一个博客,给部分可能不太会写这个的同学讲一下,怎么实现全选功能,并且可以在任何项目里面复用这个功能。先准备一个Datagrid,我们给这个DataGrid取名为dg1。......
  • WPF刮刮乐
    WPF刮刮乐<Windowx:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.c......
  • Rubyer-WPF:打造优雅、精致的 WPF 用户界面
    在桌面应用开发领域,WPF(WindowsPresentationFoundation)凭借其强大的UI设计能力和丰富的功能,始终是开发者们青睐的工具之一。今天,我将为大家介绍一款专注于WPFUI设计的优秀项目——Rubyer-WPF,它将帮助开发者打造更加优雅、美观的用户界面。项目简介Rubyer-WPF 是由开发......
  • Rubyer-WPF:打造优雅、精致的 WPF 用户界面
    这篇文章可以通过一些结构性的调整和文字优化,使得内容更具吸引力和流畅感。以下是改进后的版本:Rubyer-WPF:打造优雅、精致的WPF用户界面在桌面应用开发领域,WPF(WindowsPresentationFoundation)凭借其强大的UI设计能力和丰富的功能,始终是开发者们青睐的工具之一。今天,我将为......
  • WPF页面中将一个控件的宽度绑定到其父级用户控件的实际宽度
    该实际场景比较常见于,当存在多个用户控件页面拼成一个窗体,因为实际控件对应窗体的宽度并不能确定,也不是那种能指定的宽度或者高度,比如窗体分导航区域和内容区域,左侧导航区域可以直接指定宽度,而右侧内容区域则是使用Auto或者*的宽度。在WPF中,尝试将一个控件的宽度绑定到其父级用户......