WPF+Prism+LiveCharts+materialdesignin 搭建WPF开发框架

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

WPF+Prism+LiveCharts 搭建WPF开发框架



前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容

Prism

关于Prism的详细介绍如下

  1. 遵循设计模式,提升代码可维护性
    MVVM 模式的有效应用:Prism 以 MVVM 模式为核心,将视图(View)和业务逻辑(ViewModel)分离。视图专注于界面展示,ViewModel 负责处理业务逻辑和数据交互。这种分离使得代码结构清晰,易于理解和维护。例如,当需要修改界面布局时,只需关注视图层的 XAML 代码,而不会影响到业务逻辑;反之,修改业务逻辑时也不会对视图造成影响。
    依赖注入原则:Prism 支持依赖注入(Dependency Injection,DI),通过使用容器(如 Unity、Autofac 等)来管理对象的创建和生命周期。依赖注入使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。例如,在 ViewModel 中需要使用某个服务时,只需通过构造函数注入该服务,而不需要在 ViewModel 内部直接创建服务实例,这样在测试时可以轻松替换服务的实现。
  2. 实现模块化开发,增强项目扩展性
    模块的划分与管理:Prism 允许将应用程序划分为多个独立的模块,每个模块可以包含自己的视图、ViewModel、服务等。模块之间通过接口进行通信,降低了模块之间的耦合度。例如,一个大型的企业级应用可以划分为用户管理模块、订单管理模块、报表模块等,每个模块可以独立开发、测试和部署,当需要添加新功能时,只需开发新的模块并集成到应用程序中即可。
    模块的动态加载:Prism 支持模块的动态加载,即可以在应用程序运行时根据需要加载或卸载模块。这对于一些需要根据用户权限或业务需求动态扩展功能的应用非常有用。例如,对于不同角色的用户,应用程序可以只加载该用户有权限使用的模块,提高了应用程序的灵活性和性能。
  3. 提供导航服务,优化用户体验
    统一的导航机制:Prism 提供了强大的导航服务,使得在不同视图之间进行导航变得简单和统一。通过使用导航服务,开发者可以在 ViewModel 中轻松实现页面的跳转,而不需要在视图层编写复杂的导航逻辑。例如,在一个多页面的应用程序中,用户点击某个按钮后需要跳转到另一个页面,只需在对应的 ViewModel 中调用导航服务的方法即可实现。
    导航参数的传递:Prism 的导航服务支持传递参数,使得在不同视图之间传递数据变得方便。例如,在一个商品列表页面点击某个商品后,需要跳转到商品详情页面并显示该商品的详细信息,这时可以通过导航参数将商品的 ID 传递到商品详情页面的 ViewModel 中,然后在 ViewModel 中根据商品 ID 从数据库或服务中获取商品的详细信息。
  4. 事件聚合器机制,促进组件间通信
    松耦合的通信方式:Prism 的事件聚合器(Event Aggregator)提供了一种松耦合的组件间通信方式。不同的模块或组件可以通过事件聚合器发布和订阅事件,而不需要直接引用对方。例如,在一个购物车应用中,当商品添加到购物车时,购物车模块可以通过事件聚合器发布一个 “商品添加到购物车” 的事件,而订单统计模块可以订阅该事件,当事件发生时更新订单统计信息。
    跨模块通信的支持:事件聚合器使得不同模块之间的通信变得简单和灵活。在大型应用程序中,不同模块可能位于不同的程序集或项目中,使用事件聚合器可以方便地实现跨模块的消息传递,提高了应用程序的整体协作性。
  5. 丰富的开发资源和社区支持
    大量的示例和文档:Prism 拥有丰富的官方文档和示例代码,这些资源可以帮助开发者快速上手和掌握 Prism 的使用。无论是初学者还是有经验的开发者,都可以通过官方文档和示例代码了解 Prism 的各种功能和最佳实践。
    活跃的社区:Prism 有一个活跃的开源社区,开发者可以在社区中交流经验、分享代码、解决问题。社区中还会不断涌现出各种扩展和插件,进一步丰富了 Prism 的功能和应用场景。

前置

1、先创建一个项目,然后新建好文件夹与安装好依赖

在这里插入图片描述
创建好后,添加引用。注意版本选择的是DryIoc。依赖注入的版本。
在这里插入图片描述
引入后还需要配置一下。原框架是Application。修改前后如下:
在这里插入图片描述
在这里插入图片描述
接着修改app.xaml.cs文件(这里继承PrismApplication可以是因为PrismApplication其实就是继承了Application)
在这里插入图片描述
修改完运行,可能会跳出来2个窗口,因为系统还有个默认的启动页面,禁止即可。这一行删掉就行。再运行就一个窗口了。
在这里插入图片描述

一、区域

1、创建Views 和 ViewModels文件夹。里面分别存放用户控件和模型。命名是prism框架要求,必须。

在这里插入图片描述

在这里插入图片描述
这里页面与模型绑定有2个办法。

  • 一个是按照prism的命名规则,进行绑定。
    即在页面上引入prism后设置 prism:ViewModelLocator.AutoWireViewModel=“True”。就会根据
    UCA》UCAViewModel 自定绑定
    在这里插入图片描述
    这里需要将系统自带的MainWindow.xaml删除 ,在views文件夹下面新建一个同名的。这样命名空间就处在一个文件夹下
    在这里插入图片描述

  • 另一个方法是需要在App.xaml.cs里面手动绑定视图模型,这样可以不要用按照规则来命名。
    如下:
    在这里插入图片描述

2、绑定属性

在绑定的对应视图模型里面,继承BindableBase类后可以创建绑定属性(快捷创建 propfull tab tab)
RaisePropertyChanged() 方法要加上
MainWindowViewModel代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using WpfApp1.Views;

namespace WpfApp1.ViewModels
{
    public class MainWindowViewModel:BindableBase
    {

        //定义代理命令(参数是string类型)
        public DelegateCommand<string> ShowContentCmm { get; set; }

        /// <summary>
        /// 构造函数
        /// </summary>
        public MainWindowViewModel()
        {
            //实例化
            ShowContentCmm = new DelegateCommand<string>(ShowContentCmmFun);
        }
        //绑定属性
        /// <summary>
        /// 显示内同
        /// </summary>
        private UserControl _ShowContent;

		public UserControl ShowContent
        {
			get { return _ShowContent; }
			set { _ShowContent = value;
				//双向绑定,数据改变通知页面 MVVM
				RaisePropertyChanged();
			}
		}

        /// <summary>
        /// 显示内容的命令
        /// </summary>
        /// <param name="pageName"></param>
        public void ShowContentCmmFun(string pageName) {
            if (pageName == "UCA") {
                ShowContent = new UCA();
            }
            if (pageName == "UCB")
            {
                ShowContent = new UCB();
            }
            if (pageName == "UCC")
            {
                ShowContent = new UCC();
            }
        }
    }
}

界面上
在这里插入图片描述
以上代码准备好,可以运行好后。开始使用区域

3、区域使用

将上面三个if判断的模块修改。进行解耦
将ABC三个用户控件注入到一个地方。其他视图模型想要哪个,就自己拿哪个就行了。
1、先将三个空间注入导航里面
在这里插入图片描述

2、方法内从区域管理里面通过导航取出
在这里插入图片描述

3、页面上要绑定区域名字与模型里面一致
在这里插入图片描述
运行后效果一致,但是实现了解耦的操作

二、模块化

就是为了引用别人的dll或者程序集

1、根据区域的代码 创建新的WPF程序 模块A 模块B.并修改输出属性

新建后 将输出类型改为类库,然后将自带的文件全部删除。(我这里名字打错了 应该是ModuleA和ModuleB 而不是model)
为什么不直接创建类库,是因为要在模块里面新增窗口,用户控件等。直接创建类库不支持。不知道以后可不可以
在这里插入图片描述

文件目录依旧创建Views和 ViewModels。与之前一致,并且安装prism.DryIoc的包

  • 要再2个类库下面各自新建一个生成文件。ModuleAProfile 和ModuleBProfile。名称无所谓
    在类里面继承prism的模块接口IModule并且要实现接口
    在这里插入图片描述

2、如何引用。直接项目的引用就不演示了,直接演示引用dll

1、重新生成moduleA和B 后 打开文件夹位置 找到dll文件
2、在主项目里面创建modules文件夹,将2个dll放进去。并且都是始终复制
在这里插入图片描述
在这里插入图片描述

3、重写IModuleCatalog方法
在这里插入图片描述
运行后即可
在这里插入图片描述

3、调试

调试的时候 还是要直接引入项目比较好调试
引入项目是
1、添加项目引用在这里插入图片描述
2、重写ConfigureModuleCatalog方法
在这里插入图片描述
在里面新增模块的加载文件即可。运行起来就可以打断点调试

三、导航

1、在调用

WPF上使用MaterialDesign框架---下载与配置 Material Design语言的一些重要功能包括 系统字体Roboto的升级版本 ,同时颜色更鲜艳,动画效果更突出。谷歌的想法是让谷歌平台上的开发者掌握这个新框架,从而让所有应用就有统一的外观,就像是苹果向开发者提出的设计原则一样。大家可能还会记得,最近曾看到过有关这些变动的文章, 有些博客 已经掌握了外泄截屏,显示经过了重新设计的Gmail,界面更干净、更简约。在安卓平台上,这种新界面被称为Material,支持各种新动画效果,具有内置的实时UI阴影,以及可在不同屏幕之间切换的hero元素。 阅读详情

相关推荐

WPF+Prism 模块化编程(一)

如何在WPF中创建基于Prism框架的模块化项目

lingshuangcanxue 4256

WPF基础之界面设计(MaterialDesignThemes)

1、Nuget安装MaterialDesignThemes框架,安装LiveChartsLiveCharts.Wpf(用来添加曲线,也可以下载LiveCharts.dll、LiveCharts.Wpf.dll,然后引用DLL)4、在MainWindow.xaml添加MaterialDesignThemes、LiveChartsLiveCharts.Wpf的引用。5、左边菜单栏关键性代码如下:(全部源码可去上方CSDN代码地址自由下载)

yigu4011的博客 7815

WPF常用框架

WPF 开发中,常用的框架有助于简化开发流程、提高代码的可维护性和可测试性,特别是在构建复杂应用程序时。

weixin_39604653的博客 4675

打造现代化 WPF 应用:Prism + Material Design 实战(ColorZone、Drawer、Snackbar)

本文将介绍如何利用Material Design In XAML(MDIX)工具包和Prism框架,快速为WPF应用构建现代化的Material风格界面和模块化架构。文章重点讲解了三个核心MDIX控件:自动配色的ColorZone容器、侧边导航菜单Drawer,以及轻量提示Snackbar的集成方法。通过一个完整Demo演示了如何结合Prism实现导航式应用,包括主题配置、服务注册、区域导航等关键步骤。读者将掌握利用MDIX快速美化WPF界面,并通过Prism实现松耦合架构的开发技巧,显著提升应用的用户体验

qq_45323698的博客 260

WPF Prism框架介绍

一、什么是Prism Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。 二、官方地址 https://github.com/PrismLibrary/Prism 基于Prism的VisualStudio扩展包模板: Prism Template Pack,下载它后可以快速创建基于Prism的项目。 三、Prism框架内容 框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能

目标:MVP 4万+

WPF 使用MaterialDesign(开源UI控件库)

WPF 使用MaterialDesign开源UI控件库(基于.NET6,Prism框架)

lvxingzhe3的博客 5080

如何在Wpf程序中使用MaterialDesign,实现mvvm,及封装常用的确认对话框、信息输入对话框、进度等待框

通过一个简单的demo示例,介绍了MaterialDesignwpf应用程序中的使用,实现wpf的mvvm,并封装了MaterialDesign酷炫的弹窗对话框

hyq106的博客 1万+

WPF Prims框架详解

Prims框架WPF的一个框架,特点是集成了我们平常常用的开发模式,封装了很多常用的功能。例如消息通知,路由导航,Model绑定。

qq_44695769的博客 1万+

22WPF----Prism框架

文档可以参考源码地址:版本8.1Prism框架10+历史、微软,最新版本使用2、功能说明Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器3Prism框架关键程序Prism.Core:实现MVVM的核心功能,属于一个与平台无关的项目Prism.Wpf:包含了RegionModuleNavigation,其他的一些WPF的功能4、获取Prism框架

qq_58563355的博客 5089

WPFPrism框架

融合官方文档和个人理解并参考其他博主的相关文章,对prism框架下的各个功能模块进行了较为详细的整理,并通过案例代码的方式更加直观的呈现相关函数的功能。以方便与自我复习和理解。

xiaochuideai的博客 7601

WPF框架介绍---Prism框架(万字长文一篇文章带你弄懂Prism

Prism 是一个开源的、跨平台的框架,专为构建复杂的 XAML 应用(如 WPF、Xamarin.Forms、UWP)而设计。它基于 MVVM 模式,通过 依赖注入、模块化、区域管理 和 事件聚合器 等核心功能,帮助开发者实现松耦合、可扩展的应用架构。

white_papers的博客 2万+

WPF使用MaterialDesign -- 好看的控件先从button开始

WPF下 安装及使用 MaterialDesign 简单介绍

阿杆的博客 9332

一、WPF架构

WPF架构简介

qq_43050689的博客 4028

简介WPFPrism框架

1. 什么是Prism         Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。         Prism是一个用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松耦合、可维护和可测试的XAML应用程序的框架

XiaoCai 8967

WPFPrism框架基础

Prism框架: 初识: 我们创建一个基于net5.0的WPF应用程序 创建完之后在VS里面添加相关的包 修改app继承的基类 public partial class App : PrismApplication { } 这时候会报错,我们去修改前台的代码 <prism:PrismApplication x:Class="PrisimDemo.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presen

weixin_52360147的博客 7924

WPF MaterialDesign 初学项目实战(1)首页搭建

项目运行成功之后左边的列表就是提供的控件的列表仔细看的话提供的控件非常的完整,消息提示,弹出层,手风琴,面包屑,卡片等。常用的都具备了。这里顺便说一下,前端的UI一般是+UI框架+统计图解决。VueEChartsUniappuViewuChart这个框架还挺好看的,但是没有提供统计图的方法。我去NuGet上面搜了一下,发现了统计图。看了一下官网不知道要不要收费,等这个结束了我去学一下这个统计图的UI。基本前端的UI就这些了。

qq_44695769的博客 5028

WPF框架---Prism框架总结

Prism提供了一个松散耦合的事件发布/订阅机制,允许应用程序的不同部分之间进行通信,而不 需要直接引用对方,这有助于减少组件之间的依赖关系,提高代码的可维护性。当有两个页面进 行通信时,不需要直接引用彼此,直接通过事件聚合器就可以实现通信。

qq_58982249的博客 2561

WPF Prism介绍和简单实例(基于.net framework)

WPF Prism介绍和简单实例

lvxingzhe3的博客 8042
上一篇: .Net和RabbitMQ的使用 (持续更新)
下一篇: 安装docker-compose 和 安装 Elasticsearch(JiaBa)
T_Tboy
博客等级 码龄7年 60粉丝 · 9原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值