C#:wpf ui 4.0 是如何实现页面导航的?

wpf ui 介绍

wpf ui 是一款我比较喜欢的wpf ui界面开源库,目前已经获得了8.5颗stars,还是很受欢迎的:

wpf ui在vs中也提供了快速开发模板:

让wpf开发者可以快速进行应用开发,已经设置好了模板。

但是我发现最新的模板的页面导航方式跟之前不一样了。

先看下wpf ui的迁移文档:

先简单翻译一下:

迁移计划

本页概述了迁移时需要考虑的关键变更和重要细节。它突出了新功能、已更改的内容以及确保顺利过渡所需的步骤。这不是一份完整的逐步指南,而是一个快速参考,帮助您导航迁移过程中最关键的部分。

抽象包

一些 WPF UI 接口已被移动到独立包 WPF-UI.Abstractions。您无需引用它,它将始终随 WPF-UI NuGet 包自动添加。

导航接口

导航接口已移至独立的 WPF-UI.Abstractions 包中。这样,如果你有与其他项目相关的模型、视图或其他业务服务,这些项目不涉及 WPF,你可以在多个应用程序中共同开发它们。

新命名空间

INavigationAware 和 INavigableView 已移动到 Wpf.Ui.Abstractions.Controls 命名空间。

基于依赖注入的页面创建

IPageService 已更名为 INavigationViewPageProvider。

其默认实现位于新的 Wpf.Ui.DependencyInjection 包中。您只需使用 services.AddNavigationViewPageProvider() 扩展方法,然后在导航中指定要使用此接口。然后 NavigationView 将使用 DI 容器进行页面创建。

导航服务

在主包(WPF-UI)中定义的INavigationService使得导航管理变得简单。您可以用它来方便地在视图模型之间进行注入。我们强烈建议将其设置为单例。

它是如何实现页面导航的?

来到App.xaml.cs:

与实现导航有关的三个地方。

运行程序,来到ApplicationHostService.cs:

首先从依赖注入容器中获取INavigationWindow实例。

转到INavigationWindow接口的定义:

定义了几个和导航有关的函数。

下一步在获取INavigationWindow的时候,会先实例化主窗体的ViewModel。

在这里会为NavigationView这个控件设置SetNavigationControl。

请注意这里的RootNavigation就是指在xaml中使用的那个NavigationView控件:

设置了NavigationView控件中的_pageService:

现在来到导航到主页:

再到:

中由于现在_pageService已经设置了,会调用它的GetPage方法:

来到:

来到:

进行内容控件的更新。

现在就来到了首页:

现在我点击Data就会触发NavigationViewItemClick事件:

又是刚刚那样来到NavigateInternal实现页面导航:

还是通过_pageService找到对应页面,然后进行控件内容更新。

然后就会跳转到新的页面:

相关推荐
Nemo_XP2 小时前
HttpHelper类处理两种HTTP POST请求
c#
lijingguang8 小时前
在C#中根据URL下载文件并保存到本地,可以使用以下方法(推荐使用现代异步方式)
开发语言·c#
¥-oriented9 小时前
【C#中路径相关的概念】
开发语言·c#
ArabySide9 小时前
【WCF】通过AOP实现基于JWT的授权与鉴权的实践
c#·jwt·aop·wcf
xiaowu08010 小时前
C# Task异步的常用方法
c#
阿蒙Amon10 小时前
C# Linq to Objects 详解:集合处理的终极方案
c#·solr·linq
钢铁男儿10 小时前
C# 委托(调用带引用参数的委托)
java·mysql·c#
番茄小能手11 小时前
【全网唯一】C# 纯本地离线文字识别Windows版dll插件
开发语言·c#
葬歌倾城11 小时前
waferMap图像渲染
c#·wpf
甄天12 小时前
WPF路由事件:冒泡、隧道与直接全解析
c#·wpf·visual studio