首页 > 其他分享 >.NET 6.0 + WPF 使用 Prism 框架实现导航

.NET 6.0 + WPF 使用 Prism 框架实现导航

时间:2024-09-11 10:49:01浏览次数:10  
标签:框架 应用程序 Prism 视图 6.0 WPF 安装 NET

前言

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.UnityPrism.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、新建ViewsViewModels文件夹

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, 代码如下所示:

  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);
      }
  }

在这里实现了两个抽象方法:

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框架会根据规则自动查找该视图相对应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文件右键创建MainWindowViewModel继承BindableBase

  • 使用RegionManager上调用RequestNavigate方法,该方法允许您指定要导航的区域。

  • 使用RegionManager上的RegisterViewWithRegion加载View

  • 使用RegionManager上的RequestNavigate导航菜单。

MainWindow.xaml通过prism:ViewModelLocator.AutoWireViewModel="True"属性自动绑定了MainWindowViewModel

这样,当MainWindow被加载时,Prism会自动创建并关联MainWindowViewModel实例。

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()
     {
        
     }
 }

示例中创建了一个简单的Prism应用程序,其中App.xamlApp.xaml.cs配置了Prism的启动和依赖注入。

4、启动程序

通过上面代码的编写,完成WPF框架应用,具体运行效果如下所示:

总结

Prism 是一个专为 WPF 应用程序设计的 MVVM 模式框架,它通过依赖注入和控制反转容器来促进团队协作中的松耦合设计。

凭借其强大的功能和灵活性,Prism 成为了开发企业级应用程序的首选框架。不仅简化了代码结构,提高了应用程序的可维护性和可扩展性。

希望这篇文章能帮助你了解Prism框架的基本概念、安装步骤以及如何使用。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

标签:框架,应用程序,Prism,视图,6.0,WPF,安装,NET
From: https://www.cnblogs.com/1312mn/p/18401144

相关文章

  • C#/.NET/.NET Core优秀项目和框架2024年8月简报
    思维导航前言EasySQLiteYuebonCoreMailKitFluentEmailAI-Lossless-ZoomerThingsGatewayIoTGatewayNSmartProxyNotepadsMaterialDesign前言公众号每月定期推广和分享的C#/.NET/.NETCore优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众......
  • 使用kube-prometheus部署k8s监控---超详细(Kubernetes Deployment of Kubernetes Moni
    ......
  • 强!70.3K star ! 推荐一款功能强大、开源、可视化的性能实时监控系统:Netdata
    在当今复杂多变的IT环境中,系统性能的实时监控与分析对于确保业务连续性、系统稳定运行以及快速故障排查至关重要。随着云计算、大数据和微服务架构的普及,对监控系统的要求也日益增高。今天给大家推荐一款性能监控工具为:Netdata。它作为一款开源、实时、轻量级的系统性能监控工......
  • 理论+实战了解kubernetes及pod管理
    一、kubernetes简介及部署方法1.1kubernetes介绍kubernetes是一个容器编排软件工具,除了它还有doker自带的容器编排工具Swarm、apche的一个资源统一管控工具mesos等kubernetes在Docker作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年Borg系统运行......
  • 使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
    前言说到.NET相关的反编译工具大家脑海里第一个想到的工具是什么?ILSpy、dnSpy、还是dotPeek?咱们今天的主要内容是讲讲dnSpyEx(dnSpyEx是dnSpy项目的非官方Fork维护版本)这个开源的.NET程序集反编译、编辑和调试工具该如何使用。4款免费且实用的.NET反编译工具.NET反编译神器ILSpy怎么......
  • FIT9137 An Enterprise Network Design
    FIT9137Assignment2SubmissionGuidelinesAssignment2 isworth 25% of theUnit Marks.Deadline:Week-8–Friday, 13th September 2024, 11:55PM (Melbournetime)● Submissionformatanddetails: You must submit exactlytwo files with the ......
  • Kubernetes 基础:Ingress的高可用部署
    前言在上一章节中,我们知道有以下几种方式可以实现对外暴露服务:NodePort(Pod设置HostNetWork同理)LoadBalancerExternalIP1.1背景但在实际环境中,我们很少直接使用这些方式来对外暴露服务,因为它们都有一个比较严重的问题,那就是需要占用节点端口。也就是说,占用节点端口......
  • Kubernetes
    Kubernetes简称k8s,是一个开源,用于管理云平台中多个主机上容器化的应用,k8s目标是让部署容器化的应用简单并且高效,提供了应用部署、规划、更新、维护的一种机制。我们可以创建多个容器,k8s为每个容器实现管理,发现,访问等不需要运维人员复杂的手工配置和处理。1.架构一个k8s的集群......
  • Windows Server 2019上离线安装.NET Framework 3.5
    1、打开服务器管理器首先,下载sxs文件。然后打开服务器管理器,点击左侧的“仪表盘”,如下图所示。https://chaonb.lanzouw.com/ifOU01rvm7gf密码:666 2、添加角色和功能点击上图中的“添加角色和功能”,弹出下图所示“添加角色和功能向导”。3、选择安装功能一直点击“下......
  • 超轻量级、支持插件的 .NET 网络通信框架
    ##超轻量级、支持插件的.NET网络通信框架在当今高度互联的世界中,高效、可靠的网络通信是构建各种应用程序的关键。无论是开发Web服务、实时通信应用,还是物联网设备,都需要一个强大且灵活的网络通信框架来支撑。然而,传统的网络通信框架往往过于臃肿,难以满足现代应用程序对性能和......