.NET 6.0 + WPF 使用 Prism 框架實(shí)現(xiàn)導(dǎo)航功能
前言
Prism 一個(gè)開(kāi)源的框架,專門(mén)用于開(kāi)發(fā)可擴(kuò)展、模塊化和可測(cè)試的企業(yè)級(jí) XAML 應(yīng)用程序,適用于 WPF(Windows Presentation Foundation)和 Xamarin Forms 等平臺(tái)。
Prism 基于 MVVM(Model-View-ViewModel)設(shè)計(jì)模式,提供一套豐富的工具和庫(kù),能夠?qū)崿F(xiàn)模塊化、依賴注入、導(dǎo)航和事件聚合等功能。
本文將介紹 Prism 框架的基本概念、安裝步驟以及使用。
什么是Prism?
Prism 是一個(gè)用于開(kāi)發(fā)靈活、可維護(hù)的 WPF、Windows 10 UWP 和 Xamarin.Forms 應(yīng)用程序的框架。它是由微軟的模式與實(shí)踐團(tuán)隊(duì)開(kāi)發(fā)的,,構(gòu)建模塊化、可測(cè)試的應(yīng)用程序。Prism 包含了幾個(gè)核心組件,以支持應(yīng)用程序的架構(gòu)和設(shè)計(jì)模式:
1、依賴注入(Dependency Injection)
Prism 提供了一個(gè)依賴注入容器,可以將應(yīng)用程序的組件和服務(wù)進(jìn)行解耦,從而提高代碼的可測(cè)試性和可維護(hù)性。
2、模塊化(Modularity)
Prism 支持模塊化設(shè)計(jì),將應(yīng)用程序分解成獨(dú)立的模塊,每個(gè)模塊負(fù)責(zé)特定的功能。這樣助于減少應(yīng)用程序的復(fù)雜性,并能夠使開(kāi)發(fā)和維護(hù)更加容易。
3、導(dǎo)航(Navigation)
Prism 提供了一個(gè)靈活的導(dǎo)航系統(tǒng),可以定義視圖之間的導(dǎo)航路徑,并管理視圖的生命周期。
4、事件聚合器(Event Aggregator)
這是一個(gè)松散耦合的事件發(fā)布/訂閱機(jī)制,應(yīng)用程序的不同部分之間進(jìn)行通信,而不需要直接引用對(duì)方。
5、命令(Commands)
Prism 提供了一種簡(jiǎn)化的方式來(lái)處理用戶界面中的命令,如按鈕點(diǎn)擊事件。
6、數(shù)據(jù)綁定(Data Binding)
雖然 Prism 本身不提供數(shù)據(jù)綁定機(jī)制,但它與 WPF 和 Xamarin.Forms 的數(shù)據(jù)綁定框架緊密集成,可以輕松地將視圖模型與視圖進(jìn)行綁定。
7、視圖模型(ViewModel)
Prism 鼓勵(lì)使用視圖模型模式,是一種將業(yè)務(wù)邏輯與用戶界面分離的設(shè)計(jì)模式,有助于程序更加清晰和可維護(hù)。
安裝 Prism
Prism 可通過(guò)NuGet方案包管理器進(jìn)行安裝,主要安裝三個(gè)Prism.Core、Prism.Unity、Prism.Wpf。
首先創(chuàng)建一個(gè)新的 WPF、Xamarin Forms、Uno 或 WinUI 項(xiàng)目,然后打開(kāi) NuGet 包管理器,右鍵點(diǎn)擊項(xiàng)目 -> 選擇"管理 NuGet 包"。
1、安裝 Prism 核心包
在NuGet包管理器中,搜索并安裝 Prism.Core
。
2、安裝容器包
在NuGet包管理器中,搜索Prism.Unity
或Prism.DryIoc
(根據(jù)你的需求選擇),然后點(diǎn)擊安裝。
Unity是Prism官方推薦的容器之一,但DryIoc在某些情況下可能提供更高的性能。
3、安裝平臺(tái)包
WPF 安裝
Prism.Wpf
Xamarin Forms 安裝
Prism.Forms
Uno Platform 安裝
Prism.Uno
WinUI 安裝
Prism.WinUI
具體操作步驟,可以參考下圖:
使用 Prism
通過(guò)一個(gè)手動(dòng)敲代碼示例實(shí)現(xiàn) WPF MVVM框架 Prism 導(dǎo)航,具體可以參考以下代碼。
1、新建WPF項(xiàng)目
首先新建一個(gè)WPF
項(xiàng)目,根據(jù)上面圖示完成Prism的安裝,具體項(xiàng)目結(jié)構(gòu)如下圖所示:
1、框架使用 .NET 6.0、Visual Studio 2022;
2、新建Views
與ViewModels
文件夾
2、重寫(xiě) App.xaml
添加命名空間xmlns:prism="http://prismlibrary.com/"
記得刪除StartupUri="MainWindow.xaml
繼承由Application->PrismApplication,代碼如下所示:
<prism:PrismApplication x: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 class App : PrismApplication { protected override Window CreateShell() { return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { containerRegistry.RegisterForNavigation<Home, HomeViewModel>(); containerRegistry.RegisterForNavigation<Edge, EdgeViewModel>(); } protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); } }
在這里實(shí)現(xiàn)了兩個(gè)抽象方法:
CreateShell
該方法返回了一個(gè)Window類型的窗口, 其實(shí)就是返回應(yīng)用程序的主窗口。
RegisterTypes
該方法用于在Prism初始化過(guò)程中, 我們定義自身需要的一些注冊(cè)類型, 以便于在Prism中可以使用。
注意:
Views
文件夾下新建了兩個(gè) UserControlHome、Edge
并在RegisterTypes
進(jìn)行注冊(cè)。
ViewModels
文件夾下新建了兩個(gè)VM HomeViewModel、EdgeViewModel
進(jìn)行注冊(cè)。
4、修改 MainWindow.xaml
添加命名空間
xmlns:prism="http://prismlibrary.com/"
設(shè)置
prism:ViewModelLocator.AutoWireViewModel="True" Prism
框架會(huì)根據(jù)規(guī)則自動(dòng)查找該視圖相對(duì)應(yīng)ViewModel。使用了
WPFDevelopers
中的DrawerMenu
進(jìn)行切換菜單。
<wd:Window x: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 - 導(dǎo)航欄" Width="800" Height="450" prism:ViewModelLocator.AutoWireViewModel="True"> <Grid> </Grid> </wd:Window>
5、MainWindowViewModel
選中ViewModels
文件右鍵創(chuàng)建MainWindowViewModel
繼承BindableBase
使用
RegionManager
上調(diào)用RequestNavigate
方法,該方法允許您指定要導(dǎo)航的區(qū)域。使用
RegionManager
上的RegisterViewWithRegion
加載View
。使用
RegionManager
上的RequestNavigate
導(dǎo)航菜單。
MainWindow.xaml
通過(guò)prism:ViewModelLocator.AutoWireViewModel="True"
屬性自動(dòng)綁定了MainWindowViewModel
。
這樣,當(dāng)MainWindow
被加載時(shí),Prism會(huì)自動(dòng)創(chuàng)建并關(guān)聯(lián)MainWindowViewModel
實(shí)例。
public class MainWindowViewModel : BindableBase { private DrawerMenuItem _selectedItem; public DrawerMenuItem SelectedItem { get { return _selectedItem; } set { SetProperty(ref _selectedItem, value); } } public DelegateCommand SelectionChangedCommand { get; } private readonly IRegionManager _regionManager; ? /// <summary> /// /// </summary> /// <param name="regionManager"></param> public MainWindowViewModel(IRegionManager regionManager) { } void UpdateRegionViews() { } }
示例中創(chuàng)建了一個(gè)簡(jiǎn)單的Prism應(yīng)用程序,其中App.xaml
和App.xaml.cs
配置了Prism的啟動(dòng)和依賴注入。
4、啟動(dòng)程序
通過(guò)上面代碼的編寫(xiě),完成WPF框架應(yīng)用,具體運(yùn)行效果如下所示:
總結(jié)
Prism 是一個(gè)專為 WPF 應(yīng)用程序設(shè)計(jì)的 MVVM 模式框架,它通過(guò)依賴注入和控制反轉(zhuǎn)容器來(lái)促進(jìn)團(tuán)隊(duì)協(xié)作中的松耦合設(shè)計(jì)。
憑借其強(qiáng)大的功能和靈活性,Prism 成為了開(kāi)發(fā)企業(yè)級(jí)應(yīng)用程序的首選框架。不僅簡(jiǎn)化了代碼結(jié)構(gòu),提高了應(yīng)用程序的可維護(hù)性和可擴(kuò)展性。
希望這篇文章能幫助你了解Prism框架的基本概念、安裝步驟以及如何使用。
到此這篇關(guān)于.NET 6.0 + WPF 使用 Prism 框架實(shí)現(xiàn)導(dǎo)航的文章就介紹到這了,更多相關(guān).NET 6.0 WPF 導(dǎo)航內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MVC+EasyUI+三層新聞網(wǎng)站建立 分頁(yè)查詢數(shù)據(jù)功能(七)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第七篇,教大家如何分頁(yè)查詢出數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07.NET 日志系統(tǒng)設(shè)計(jì)思路及實(shí)現(xiàn)代碼
這篇文章主要介紹了.NET 日志系統(tǒng)設(shè)計(jì)思路及實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-12-12C#調(diào)用動(dòng)態(tài)unlha32.dll解壓Lha后綴的打包文件分享
這篇文章介紹了,C#調(diào)用動(dòng)態(tài)unlha32.dll解壓Lha后綴的打包文件,有需要的朋友可以參考一下2013-09-09win8/8.1系統(tǒng)安裝.net framework 3.5出現(xiàn)0x800F0906代碼錯(cuò)誤的解決方法
這篇文章主要為大家詳細(xì)介紹了win8/8.1系統(tǒng)安裝.net framework 3.5出現(xiàn)0x800F0906代碼錯(cuò)誤的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01.Net?Core?進(jìn)程守護(hù)之Supervisor使用詳解
這篇文章主要介紹了.Net?Core?進(jìn)程守護(hù)之Supervisor使用,Supervisor它可以很方便的監(jiān)聽(tīng)、啟動(dòng)、停止、重啟一個(gè)或多個(gè)進(jìn)程,對(duì).Net?Core?進(jìn)程守護(hù)之Supervisor使用相關(guān)知識(shí)感興趣的朋友一起看看吧2022-04-04基于.Net中的數(shù)字與日期格式化規(guī)則助記詞的使用詳解
本篇文章是對(duì).Net中的數(shù)字與日期格式化規(guī)則助記詞的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05asp.net 簡(jiǎn)單驗(yàn)證碼驗(yàn)證實(shí)現(xiàn)代碼
網(wǎng)站開(kāi)發(fā)一般登錄注冊(cè)的時(shí)候都要用到了 所以寫(xiě)下來(lái)給大家參考參考2009-09-09