文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

WPF框架Prism中导航Navigation怎么使用

2023-06-29 03:58

关注

这篇文章主要讲解了“WPF框架Prism中导航Navigation怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF框架Prism中导航Navigation怎么使用”吧!

使用场景

在普遍的业务场景当中, 必不可少的是页面切换, 而Prism就可以使用Navigation功能来进行页面导航, 在不同的场景当中会有各种用法, 例如在切换页面验证、传递参数、返回上一页、返回下一页等功能。

导航的基本条件

注册显示区域

注册导航页面

1.注册导航

注册视图类型或添加别名, 如果为指定别名,名称默认为当中类型的名称

public class ModuleAModule : IModule    {        public void OnInitialized(IContainerProvider containerProvider)        {        }        public void RegisterTypes(IContainerRegistry containerRegistry)        {            //添加别名 "CustomName"            containerRegistry.RegisterForNavigation<ViewA>("CustomName");            //默认名称 "ViewB"            containerRegistry.RegisterForNavigation<ViewB>();        }    }

注册时,指定ViewModel或添加别名。

 public class ModuleAModule : IModule    {        public void OnInitialized(IContainerProvider containerProvider)        {        }        public void RegisterTypes(IContainerRegistry containerRegistry)        {            //指定ViewModel            containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>();            //指定ViewModel并且添加别名            containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("CustomName");        }    }

2.使用导航

正如前面的章节所讲到, Region的注册以及管理、导航等, 我们可以使用IRegionManager接口,所以,我们现在便可以使用该接口实现导航功能, 如下所示:

IRegionManager regionManager = …;regionManager.RequestNavigate("RegionName", "ViewName");

可以注意点, 我们调用了IRegionManager接口的RequestNavigate方法, 并且传递了两个参数:

3.带参数导航

正如,我们想要在导航页前, 传递一些参数, 则可以使用NavigationParameters, 如下所示:

var param = new NavigationParameters();param.Add("Parameter", param);_regionManger.RequestNavigate("RegionName", "ViewName", param);//类似URL地址传递参数_regionManger.RequestNavigate("RegionName", "ViewName?id=1&Name=xiaoming");

疑问?

当我们使用导航为指定区域注册视图时, 我们怎么控制打开的过程? 所以, 下面我们将讲解一下

INavigationAware接口。

INavigationAware

该接口包含3个方法, 每个方法中都包含当前导航的上下文, 如下所示:

        public void OnNavigatedTo(NavigationContext navigationContext)        {        }        public bool IsNavigationTarget(NavigationContext navigationContext)        {            return true;        }        public void OnNavigatedFrom(NavigationContext navigationContext)        {        }

INavigationAware 执行流程

WPF框架Prism中导航Navigation怎么使用

获取导航请求参数

正如上面所描述, 导航中允许我们传递参数, 用于在我们完成导航之前, 进行做对应的逻辑业务处理。这时候, 我们便可以在OnNavigatedTo方法中通过导航上下文中获取到传递的所有参数。如下:

        public void OnNavigatedTo(NavigationContext navigationContext)        {            var id = navigationContext.Parameters.GetValue<int>("id");            var name = navigationContext.Parameters["Name"].ToString();        }

IConfirmNavigationRequest

该接口继承于INavigationAware, 所以, 它多了一个功能: 允许用户针对导航请求进行拦截。

    //多了一个回调函数, 该值觉得是否拦截该导航请求    void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback);

IConfirmNavigationRequest 执行流程

WPF框架Prism中导航Navigation怎么使用

拦截导航请求

当打开新的导航时, 或许有些情况下你需要经过用户进行确认, 这个时候, IConfirmNavigationRequest接口可以满足需求, 如下:

        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)        {            bool result = true;            if (MessageBox.Show("确认导航?", "温馨提示", MessageBoxButton.YesNo) == MessageBoxResult.No)                result = false;            //通过回调当前返回的确认结果,决定是否启动该导航            continuationCallback(result);        }

Navigation Journal

导航日志, 其实就是对导航系统的一个管理功能, 理论上来说, 我们应该知道我们上一步导航的位置、以及下一步导航的位置, 包括我们导航的历史记录。以便于我们使用导航对应用程序可以灵活的控制。

IRegionNavigationJournal

该接口包含以下功能:

1.示例(返回上一页)

当导航日志当中,包含上一页的历史记录, 如下所示, D的前面有ABC的记录,所以对于D而言, 它可以返回上一页, 所以CanGoBack 为True。

WPF框架Prism中导航Navigation怎么使用

2.示例(返回下一页)

当导航日志当中,包含下一个的历史记录,如下所示,D的后面有E的记录,所以对于D而言,它可以返回下一页,所以CanGoForward 为True。

WPF框架Prism中导航Navigation怎么使用

感谢各位的阅读,以上就是“WPF框架Prism中导航Navigation怎么使用”的内容了,经过本文的学习后,相信大家对WPF框架Prism中导航Navigation怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯