当前位置: 首页 > wzjs >正文

乐清网站网站建设北京网站优化合作

乐清网站网站建设,北京网站优化合作,阿里巴巴申请网站怎么做,重庆建设执业资格注册中心网站前言 学习一下Prism。 1.Prism Prism框架提供了一套丰富的工具、类和模块,帮助开发人员实现以下功能: 模块化:Prism框架支持将应用程序拆分为多个模块,每个模块具有自己的功能和视图。这种模块化的设计使得应用程序更加灵活和…

前言

学习一下Prism。

1.Prism

Prism框架提供了一套丰富的工具、类和模块,帮助开发人员实现以下功能:

  • 模块化:Prism框架支持将应用程序拆分为多个模块,每个模块具有自己的功能和视图。这种模块化的设计使得应用程序更加灵活和可扩展。
  • 导航:Prism框架提供了导航功能,可以方便地在不同的视图之间进行导航和交互。开发人员可以定义导航路径和参数,以及处理导航事件。
  • 依赖注入:Prism框架内置了一个轻量级的依赖注入容器,可以帮助开发人员管理和解决组件之间的依赖关系。这样可以提高代码的可测试性和可维护性。
  • 事件聚合器:Prism框架提供了一个事件聚合器,可以帮助不同模块之间进行解耦和通信。开发人员可以通过发布和订阅事件来实现模块之间的交互。
  • 命令绑定:Prism框架支持命令绑定,可以将用户操作和后台逻辑进行绑定。这样可以更好地分离用户界面和业务逻辑。
  • 可测试性:Prism框架的设计考虑了应用程序的可测试性,提供了一些工具和模式,帮助开发人员编写可测试的代码。

1.1创建WPF

创建WPF程序,我是基于net8框架创建。

image-20240326213002184

安装包

Prism.DryIoc

image-20240326213043243

修改App.xaml

继承PrismApplication并实现CreateShell(设置启动页)、RegisterTypes(注册服务)

因为即设置了启动页,也设置了StartupUri,所以弹出了俩个窗体。

image-20240326213846042

1.2创建Prism

打开vs,我的是vs2022,管理扩展

image-20240326214451835

查找Prism,安装 Prism Template Pack

image-20240326214530471

安装完后,关闭所有vs,再打开就会自动修改vs2022的配置,等待修改完毕即可

image-20240326214636635

创建WPF Prism Full项目

image-20240326214744071

选择DryIoc

image-20240326214957745

创建成功

image-20240326215026523

2.Prism区域

2.1实现区域切换

创建ViewModels、Views文件夹内,注意名称,容器就是根据命名空间找到对应的类。

新建三个用户控件,并在App注入服务。

image-20240326223952386

需要修改MainWindow的命名空间,加上Views,要不容器无法找到,算是一个小坑。

MainWindow加上几个按钮和ContentControl用于区域切换。

button加上参数,用于后台命令根据名称切换界面。

prism:ViewModelLocator.AutoWireViewModel="True"。

image-20240326224304070

MainWindowViewModel实现BindableBase。

实现显示内容命令(DelegateCommand),根据前台传入的参数显示区域。

image-20240326224437753

2.2解耦优化

注入IRegionManager(区域管理),通过IRegionManager去实例化用户控件。

image-20240326225710679

App重载一下RegisterForNavigation。

如果不想使用别名需要全名,这里使用别名。

image-20240326225901070

3.Prism模块化

3.1引用模块

创建WPF程序模块A和模块B

image-20240327213111948

image-20240327213219150

删除WPF程序自带的一些文件。

image-20240327213316334

然后把Peng.MoudleA和Peng.MoudleB输出类型改为类库。

image-20240327215255938

为什么创建WPF程序而不是类库?

因为类库不能添加WPF窗口、用户控件等文件,项目需要加载模块的窗口、用户控件等。

image-20240327213440234

ModuleA、ModuleB都引用Prism.DryIoc。

  <ItemGroup><PackageReference Include="Prism.DryIoc" Version="8.1.97" /></ItemGroup>

image-20240327213901228

实现IModule,把MoudleA和MoudleB注入到IOC容器中。

image-20240327224507716

主程序引入MoudleA和MoudleB,并且改变命令参数为MoudleAUC、MoudleBUC,此名称对应模块中用户控件名称。

image-20240327215936789

在主程序添加MoudleA和MoudleB。

image-20240327220104855

3.2动态加载

添加Modules文件夹,并且把生成后的MoudleA和MoudleB移到Modules文件夹下。

image-20240327220447281

选择Peng.MoudleA.dll和Peng.MoudleBdll修改属性始终复制。

image-20240327220531072

主程序不用引入Peng.MoudleA和Peng.MoudleB了,会动态加载Modules目录下的dll。

image-20240327220752547

4.导航

4.1传参

ViewModelLocator.AutoWireViewModel="True"可以通过命名的形式让控件找到对应的视图,但是一旦名字写错就容易找不到,所以一般不建议这么使用,可以注入的时候指定控件和视图。

image-20240327224834978

通过添加NavigationParameters字典传参。

image-20240327225043595

ModuleAUCViewModel需要实现INavigationAware。

通过判断是否存在Key获取参数值,然后双向绑定显示界面。

image-20240327225129796

重新生成后,记得替换Modules目录下的dll。

image-20240327225919401

4.2导航后退

增加后退按钮,绑定后退命令。

image-20240327230002940

实现后退命令。

第一次加载的时候Journal为null,所以需要判断非null。

image-20240327230055089

传参数的时候需要添加导航记录。

image-20240327230119109

实现IConfirmNavigationRequest,这里不需要INavigationAware,因为IConfirmNavigationRequest继承了INavigationAware

image-20240327230213424

5.Prism对话框

新建Peng.MoudleC用于对话框服务。

简单写一下界面,一个Title,一个显示获取的参数,还有俩个按钮。

ModuleCUCViewModel实现BindableBase、IDialogAware。

BindableBase用于和界面绑定。

IDialogAware是对话框服务。

image-20240328153455116

实现IDialogAware几个方法。

RequestClose是返回对话框状态,在确定和取消命令的时候返回结果。

在OnDialogOpened时获取传入的参数。

在Confirm时返回参数。

image-20240328153730624

最后显示注入对话框服务。

image-20240328154012624

主界面添加一个按钮和一个文本框用于打开对话框和显示对话框传入的参数。

添加ShowDialogCmd显示对话框命令。

添加DialogService对话框服务。

在DialogService.ShowDialog回调函数中获取对话框返回结果。

image-20240328154141212

重新生成后记得改Peng.MoudleC.dll属性为始终复制。

image-20240328154455855

6.发布订阅

实现PubSubEvent,T是订阅方法的参数类型。

image-20240328214601864

代码比较简单,简单赘述一下。

主界面添加三个按钮:发布、订阅、取消订阅,绑定三个命令。

IEventAggregator是发布订阅的服务,默认已经注入,可以通过构造函数方式获取即可。

Publish:发布事件。

Subscribe:订阅事件。

CancelSub:取消订阅。

image-20240328214342252

http://www.dtcms.com/wzjs/447374.html

相关文章:

  • 什么网站是vue做的企业培训考试app
  • 独立的淘客网站名么做百度指数分析官网
  • 什么是网站建设?北京seo优化外包
  • 全屏网站怎么做的关键词seo是什么
  • 做旅游去哪个网站找图3seo
  • 手机网站微信分享代码百度seo站长工具
  • 网站建设完成后怎么上传服务器如何找推广平台
  • 跟我一起做网站 下载外链发布软件
  • 地方门户网站盈利网站百度收录突然消失了
  • 搭配服装网站源码惠州seo网络推广
  • 郴州网红打卡景点山东seo费用多少
  • 自己做的网站怎么发布上内容营销
  • 判断网站百度站长工具怎么关闭教程视频
  • 怎样做好网站建设网站seo优化分析
  • 招远网站建设价格运营培训
  • wordpress仿站视频教程百度推广官方投诉电话
  • 做钢材生意一般做什么网站好seo网站排名优化软件是什么
  • 网站建设phpweb教程免费下载百度seo
  • 永康网站建设关键词排名优化工具
  • 珠海手机建站模板投放广告找什么平台
  • 网站的反链怎么做企业网络营销策划方案范文
  • 三亚建设信息网站站优云网络公司
  • 重庆烟草电子商务网站汕头百度网站推广
  • 广州做网站媒体:北京不再公布各区疫情数据
  • 创新的广州做网站销售怎么做
  • wordpress多站点使用期限插件济南竞价托管公司
  • 企业网站建设公司 丰台站长工具ip地址查询
  • 网站域名年费多少钱天津网站建设优化
  • 无锡建设网站的公司济南百度竞价开户
  • 免费企业网站系统源码网络营销的三大基础