.NET 6.0 + WPF 使用 Prism 框架實現(xiàn)導航
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
前言Prism 一個開源的框架,專門用于開發(fā)可擴展、模塊化和可測試的企業(yè)級 XAML 應用程序,適用于 WPF(Windows Presentation Foundation)和 Xamarin Forms 等平臺。 Prism 基于 MVVM(Model-View-ViewModel)設計模式,提供一套豐富的工具和庫,能夠?qū)崿F(xiàn)模塊化、依賴注入、導航和事件聚合等功能。 本文將介紹 Prism 框架的基本概念、安裝步驟以及使用。 什么是Prism?Prism 是一個用于開發(fā)靈活、可維護的 WPF、Windows 10 UWP 和 Xamarin.Forms 應用程序的框架。它是由微軟的模式與實踐團隊開發(fā)的,,構(gòu)建模塊化、可測試的應用程序。Prism 包含了幾個核心組件,以支持應用程序的架構(gòu)和設計模式: 1、依賴注入(Dependency Injection) Prism 提供了一個依賴注入容器,可以將應用程序的組件和服務進行解耦,從而提高代碼的可測試性和可維護性。 2、模塊化(Modularity) Prism 支持模塊化設計,將應用程序分解成獨立的模塊,每個模塊負責特定的功能。這樣助于減少應用程序的復雜性,并能夠使開發(fā)和維護更加容易。 3、導航(Navigation) Prism 提供了一個靈活的導航系統(tǒng),可以定義視圖之間的導航路徑,并管理視圖的生命周期。 4、事件聚合器(Event Aggregator) 這是一個松散耦合的事件發(fā)布/訂閱機制,應用程序的不同部分之間進行通信,而不需要直接引用對方。 5、命令(Commands) Prism 提供了一種簡化的方式來處理用戶界面中的命令,如按鈕點擊事件。 6、數(shù)據(jù)綁定(Data Binding) 雖然 Prism 本身不提供數(shù)據(jù)綁定機制,但它與 WPF 和 Xamarin.Forms 的數(shù)據(jù)綁定框架緊密集成,可以輕松地將視圖模型與視圖進行綁定。 7、視圖模型(ViewModel) Prism 鼓勵使用視圖模型模式,是一種將業(yè)務邏輯與用戶界面分離的設計模式,有助于程序更加清晰和可維護。 安裝 PrismPrism 可通過NuGet方案包管理器進行安裝,主要安裝三個Prism.Core、Prism.Unity、Prism.Wpf。 首先創(chuàng)建一個新的 WPF、Xamarin Forms、Uno 或 WinUI 項目,然后打開 NuGet 包管理器,右鍵點擊項目 -> 選擇"管理 NuGet 包"。 1、安裝 Prism 核心包 在NuGet包管理器中,搜索并安裝 Prism.Core。 2、安裝容器包 在NuGet包管理器中,搜索Prism.Unity或Prism.DryIoc(根據(jù)你的需求選擇),然后點擊安裝。 Unity是Prism官方推薦的容器之一,但DryIoc在某些情況下可能提供更高的性能。 3、安裝平臺包 WPF 安裝 Prism.Wpf Xamarin Forms 安裝 Prism.Forms Uno Platform 安裝 Prism.Uno WinUI 安裝 Prism.WinUI 具體操作步驟,可以參考下圖:
使用 Prism通過一個手動敲代碼示例實現(xiàn) WPF MVVM框架 Prism 導航,具體可以參考以下代碼。 1、新建WPF項目首先新建一個WPF項目,根據(jù)上面圖示完成Prism的安裝,具體項目結(jié)構(gòu)如下圖所示: 1、框架使用 .NET 6.0、Visual Studio 2022; 2、新建Views與ViewModels文件夾
2、重寫 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, 代碼如下所示:
在這里實現(xiàn)了兩個抽象方法: CreateShell 該方法返回了一個Window類型的窗口, 其實就是返回應用程序的主窗口。 RegisterTypes 該方法用于在Prism初始化過程中, 我們定義自身需要的一些注冊類型, 以便于在Prism中可以使用。 注意: Views文件夾下新建了兩個 UserControlHome、Edge并在RegisterTypes進行注冊。 ViewModels文件夾下新建了兩個VM HomeViewModel、EdgeViewModel進行注冊。 4、修改 MainWindow.xaml添加命名空間xmlns:prism="http://prismlibrary.com/" 設置prism:ViewModelLocator.AutoWireViewModel="True" Prism框架會根據(jù)規(guī)則自動查找該視圖相對應ViewModel。 使用了WPFDevelopers中的DrawerMenu進行切換菜單。 <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 - 導航欄" Width="800" Height="450" prism:ViewModelLocator.AutoWireViewModel="True"> <Grid>
</Grid> </wd:Window> 5、MainWindowViewModel選中ViewModels文件右鍵創(chuàng)建MainWindowViewModel繼承BindableBase 使用RegionManager上調(diào)用RequestNavigate方法,該方法允許您指定要導航的區(qū)域。 使用RegionManager上的RegisterViewWithRegion加載View。 使用RegionManager上的RequestNavigate導航菜單。 MainWindow.xaml通過prism:ViewModelLocator.AutoWireViewModel="True"屬性自動綁定了MainWindowViewModel。 這樣,當MainWindow被加載時,Prism會自動創(chuàng)建并關聯(lián)MainWindowViewModel實例。
示例中創(chuàng)建了一個簡單的Prism應用程序,其中App.xaml和App.xaml.cs配置了Prism的啟動和依賴注入。 啟動程序通過上面代碼的編寫,完成WPF框架應用,具體運行效果如下所示: 總結(jié)Prism 是一個專為 WPF 應用程序設計的 MVVM 模式框架,它通過依賴注入和控制反轉(zhuǎn)容器來促進團隊協(xié)作中的松耦合設計。 憑借其強大的功能和靈活性,Prism 成為了開發(fā)企業(yè)級應用程序的首選框架。不僅簡化了代碼結(jié)構(gòu),提高了應用程序的可維護性和可擴展性。 希望這篇文章能幫助你了解Prism框架的基本概念、安裝步驟以及如何使用。 轉(zhuǎn)自https://www.cnblogs.com/1312mn/p/18401144 該文章在 2024/9/12 9:18:24 編輯過 |
關鍵字查詢
相關文章
正在查詢... |