.NET 6.0 + WPF 使用 Prism 框架实现导航
Prism 一个开源的框架,专门用于开发可扩展、模块化和可测试的企业级 XAML 应用程序,适用于 WPF(Windows Presentation Foundation)和 Xamarin Forms 等平台。
Prism 基于 MVVM(Model-View-ViewModel)设计模式,提供一套丰富的工具和库,能够实现模块化、依赖注入、导航和事件聚合等功能。
本文将介绍 Prism 框架的基本概念、安装步骤以及使用。
什么是Prism?
Prism 是一个用于开发灵活、可维护的 WPF、Windows 10 UWP 和 Xamarin.Forms 应用程序的框架。它是由微软的模式与实践团队开发的,,构建模块化、可测试的应用程序。Prism 包含了几个核心组件,以支持应用程序的架构和设计模式:
1、
依赖注入(Dependency Injection)
Prism 提供了一个依赖注入容器,可以将应用程序的组件和服务进行解耦,从而提高代码的可测试性和可维护性。
2、
模块化(Modularity)
Prism 支持模块化设计,将应用程序分解成独立的模块,每个模块负责特定的功能。这样助于减少应用程序的复杂性,并能够使开发和维护更加容易。
3、
导航(Navigation)
Prism 提供了一个灵活的导航系统,可以定义视图之间的导航路径,并管理视图的生命周期。
4、
事件聚合器(Event Aggregator)
这是一个松散耦合的事件发布/订阅机制,应用程序的不同部分之间进行通信,而不需要直接引用对方。
5、
命令(Commands)
Prism 提供了一种简化的方式来处理用户界面中的命令,如按钮点击事件。
6、
数据绑定(Data Binding)
虽然 Prism 本身不提供数据绑定机制,但它与 WPF 和 Xamarin.Forms 的数据绑定框架紧密集成,可以轻松地将视图模型与视图进行绑定。
7、
视图模型(ViewModel)
Prism 鼓励使用视图模型模式,是一种将业务逻辑与用户界面分离的设计模式,有助于程序更加清晰和可维护。
安装 Prism
Prism 可通过NuGet方案包管理器进行安装,主要安装三个Prism.Core、Prism.Unity、Prism.Wpf。
首先创建一个新的 WPF、Xamarin Forms、Uno 或 WinUI 项目,然后打开 NuGet 包管理器,右键点击项目 -> 选择"管理 NuGet 包"。
1、安装 Prism 核心包
在NuGet包管理器中,搜索并安装
Prism.Core
。
2、安装容器包
在NuGet包管理器中,搜索
Prism.Unity
或
Prism.DryIoc
(根据你的需求选择),然后点击安装。
Unity是Prism官方推荐的容器之一,但DryIoc在某些情况下可能提供更高的性能。
3、安装平台包
WPF 安装
Prism.Wpf
Xamarin Forms 安装
Prism.Forms
Uno Platform 安装
Prism.Uno
WinUI 安装
Prism.WinUI
具体操作步骤,可以参考下图:
使用 Prism
通过一个手动敲代码示例实现 WPF MVVM框架 Prism 导航,具体可以参考以下代码。
1、新建WPF项目
首先新建一个
WPF
项目,根据上面图示完成Prism的安装,具体项目结构如下图所示:
1、框架使用 .NET 6.0、Visual Studio 2022;
2、新建
Views
与
ViewModels
文件夹
2、重写 App.xaml
添加命名空间
xmlns:prism="http://prismlibrary.com/"
记得删除
StartupUri="MainWindow.xaml
继承由Application->PrismApplication,代码如下所示:
<prism:PrismApplicationx:Class="ManageCore.WpfApp.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:ManageCore.WpfApp"xmlns:prism="http://prismlibrary.com/"> <Application.Resources> </Application.Resources> </prism:PrismApplication>
3、修改 App.xaml.cs
继承由Application->PrismApplication, 代码如下所示:
public partial classApp : PrismApplication
{protected overrideWindow CreateShell()
{return Container.Resolve<MainWindow>();
}protected override voidRegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<Home, HomeViewModel>();
containerRegistry.RegisterForNavigation<Edge, EdgeViewModel>();
}protected override voidOnStartup(StartupEventArgs e)
{base.OnStartup(e);
}
}
在这里实现了两个抽象方法:
CreateShell
该方法返回了一个Window类型的窗口, 其实就是返回应用程序的主窗口。
RegisterTypes
该方法用于在Prism初始化过程中, 我们定义自身需要的一些
注册
类型, 以便于在Prism中可以使用。
注意:
Views
文件夹下新建了两个 UserControl
Home、Edge
并在
RegisterTypes
进行注册。
ViewModels
文件夹下新建了两个VM
HomeViewModel、EdgeViewModel
进行注册。
4、修改 MainWindow.xaml
添加命名空间
xmlns:prism="http://prismlibrary.com/"
设置
prism:ViewModelLocator.AutoWireViewModel="True" Prism
框架会根据规则自动查找该视图相对应ViewModel。使用了
WPFDevelopers
中的
DrawerMenu
进行切换菜单。
<wd:Windowx:Class="ManageCore.WpfApp.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:ManageCore.WpfApp"xmlns:vm="clr-namespace:ManageCore.WpfApp.ViewModels"xmlns:prism="http://prismlibrary.com/"xmlns:i="http://schemas.microsoft.com/xaml/behaviors"Title="Prism - 导航栏"Width="800"Height="450"prism:ViewModelLocator.AutoWireViewModel="True"> <Grid> </Grid> </wd:Window>
5、MainWindowViewModel
选中
ViewModels
文件右键创建
MainWindowViewModel
继承
BindableBase
使用
RegionManager
上调用
RequestNavigate
方法,该方法允许您指定要导航的区域。使用
RegionManager
上的
RegisterViewWithRegion
加载
View
。使用
RegionManager
上的
RequestNavigate
导航菜单。
MainWindow.xaml
通过
prism:ViewModelLocator.AutoWireViewModel="True"
属性自动绑定了
MainWindowViewModel
。
这样,当
MainWindow
被加载时,Prism会自动创建并关联
MainWindowViewModel
实例。
public classMainWindowViewModel : BindableBase
{privateDrawerMenuItem _selectedItem;publicDrawerMenuItem SelectedItem
{get { return_selectedItem; }set { SetProperty(ref_selectedItem, value); }
}public DelegateCommand SelectionChangedCommand { get; }private readonlyIRegionManager _regionManager;
/// <summary> /// /// </summary> /// <param name="regionManager"></param> publicMainWindowViewModel(IRegionManager regionManager)
{
}voidUpdateRegionViews()
{
}
}
示例中创建了一个简单的Prism应用程序,其中
App.xaml
和
App.xaml.cs
配置了Prism的启动和依赖注入。
4、启动程序
通过上面代码的编写,完成WPF框架应用,具体运行效果如下所示:
总结
Prism 是一个专为 WPF 应用程序设计的 MVVM 模式框架,它通过依赖注入和控制反转容器来促进团队协作中的松耦合设计。
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号
[DotNet技术匠]
社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!