以下是一个完整的WPF项目示例,使用Prism框架实现依赖注入、导航、复合命令、模块化和聚合事件功能。项目结构清晰,包含核心功能实现:

项目结构

PrismDemoApp/
├── PrismDemoApp (主项目)
│   ├── Views/
│   │   ├── ShellView.xaml
│   │   ├── MainView.xaml
│   │   └── SettingsView.xaml
│   ├── ViewModels/
│   │   ├── ShellViewModel.cs
│   │   ├── MainViewModel.cs
│   │   └── SettingsViewModel.cs
│   ├── App.xaml
│   └── Bootstrapper.cs
├── ModuleA (模块项目)
│   ├── Views/
│   │   └── ModuleAView.xaml
│   ├── ViewModels/
│   │   └── ModuleAViewModel.cs
│   └── ModuleAModule.cs
└── Events/└── MessageSentEvent.cs

1. 依赖注入配置 (Bootstrapper.cs)

public class Bootstrapper : PrismBootstrapper
{protected override DependencyObject CreateShell(){return Container.Resolve<ShellView>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){// 注册视图导航containerRegistry.RegisterForNavigation<MainView>();containerRegistry.RegisterForNavigation<SettingsView>();// 注册服务containerRegistry.Register<IDataService, DataService>();// 注册复合命令containerRegistry.RegisterSingleton<IApplicationCommands, ApplicationCommands>();}protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog){// 动态加载模块moduleCatalog.AddModule<ModuleAModule>();}
}

2. 复合命令实现 (ApplicationCommands.cs)

public interface IApplicationCommands
{CompositeCommand SaveAllCommand { get; }
}public class ApplicationCommands : IApplicationCommands
{public CompositeCommand SaveAllCommand { get; } = new CompositeCommand();
}

3. 主视图模型 (MainViewModel.cs)

public class MainViewModel : BindableBase
{private readonly IRegionManager _regionManager;private readonly IEventAggregator _eventAggregator;private readonly IApplicationCommands _commands;public DelegateCommand NavigateCommand { get; }public DelegateCommand SaveCommand { get; }public DelegateCommand SendEventCommand { get; }public MainViewModel(IRegionManager regionManager,IEventAggregator eventAggregator,IApplicationCommands commands){_regionManager = regionManager;_eventAggregator = eventAggregator;_commands = commands;NavigateCommand = new DelegateCommand(NavigateToSettings);SaveCommand = new DelegateCommand(Save);SendEventCommand = new DelegateCommand(SendEvent);// 注册到复合命令commands.SaveAllCommand.RegisterCommand(SaveCommand);}private void NavigateToSettings(){_regionManager.RequestNavigate("ContentRegion", "SettingsView");}private void Save(){// 保存逻辑}private void SendEvent(){_eventAggregator.GetEvent<MessageSentEvent>().Publish("Hello from Main!");}
}

4. 模块实现 (ModuleAModule.cs)

public class ModuleAModule : IModule
{private readonly IRegionManager _regionManager;private readonly IApplicationCommands _commands;public ModuleAModule(IRegionManager regionManager, IApplicationCommands commands){_regionManager = regionManager;_commands = commands;}public void OnInitialized(IContainerProvider containerProvider){_regionManager.RegisterViewWithRegion("ModuleRegion", typeof(ModuleAView));}public void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.RegisterForNavigation<ModuleAView>();// 订阅事件var ea = containerProvider.Resolve<IEventAggregator>();ea.GetEvent<MessageSentEvent>().Subscribe(HandleMessage);}private void HandleMessage(string message){// 处理接收到的消息}
}

5. 聚合事件 (MessageSentEvent.cs)

public class MessageSentEvent : PubSubEvent<string> { }

6. Shell视图导航 (ShellView.xaml)

<Window xmlns:prism="http://prismlibrary.com/"><DockPanel><Menu><MenuItem Header="导航"><MenuItem Command="{Binding NavigateCommand}" Header="主视图" /><MenuItem prism:CommandBehavior.Command="{Binding ApplicationCommands.SaveAllCommand}" Header="保存所有" /></MenuItem></Menu><ContentControl prism:RegionManager.RegionName="ContentRegion" /><ContentControl prism:RegionManager.RegionName="ModuleRegion" /></DockPanel>
</Window>

7. 模块视图 (ModuleAView.xaml)

<UserControl><StackPanel><Button Command="{Binding SendEventCommand}" Content="发送事件" /><TextBlock Text="{Binding ReceivedMessage}" /></StackPanel>
</UserControl>

功能说明

  1. 依赖注入:通过Bootstrapper自动注册所有组件
  2. 导航:使用RegionManager管理内容区域导航
  3. 复合命令SaveAllCommand可同时触发多个模块的保存操作
  4. 模块化ModuleAModule实现按需加载
  5. 聚合事件MessageSentEvent实现模块间松耦合通信

此项目完整展示了Prism的核心功能集成,可直接扩展为实际企业级应用架构。所有组件通过依赖注入解耦,支持模块化开发和功能扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88861.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88861.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/88861.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机学习笔记---AD/DA工作原理(含运算放大器的工作原理)

目录 AD/DA介绍 硬件电路模型 硬件电路 运算放大器 DA原理 T型电阻网络DA转换器 PWM型DA转换器 AD原理 逐次逼近型AD转换器 AD/DA性能指标 XPT2046 XPT2046时序 AD/DA介绍 AD&#xff08;Analog to Digital&#xff09;&#xff1a;模拟-数字转换&#xff0c;将模拟…

matlab实现相控超声波成像

相控超声波成像仿真检测探伤 数据接收 换能器开发 Phased Array Codes/Matlab Examples.pptx , 513230 Phased Array Codes/MATLAB M_files/delay_laws2D.m , 1027 Phased Array Codes/MATLAB M_files/delay_laws2D_int.m , 3290 Phased Array Codes/MATLAB M_files/delay_law…

Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧

大家好&#xff0c;欢迎回到Stable Diffusion入门-ControlNet 深入理解系列的第二课&#xff01; 如果你还记得第一篇文章的内容 - 我们已经了解了 ControlNet 的基础概念&#xff1a;它通过预处理器和模型两个强力模块&#xff0c;赋予了AI绘画前所未有的精准控制。 还没看过…

大数据时代UI前端的变革:从静态展示到动态交互

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据时代&#xff0c;信息以前所未有的速度和规模增长。这种数据环境的变化&#xff0c;深…

引脚个数、引脚宽度、引脚之间距离

原图&#xff1a; 最终效果图如下&#xff1a; 1.读取图片并设置参数 read_image (Image, ic_pin) dev_set_draw (margin) dev_set_line_width (2) dev_get_window (WindowHandle) get_image_size (Image, Width, Height) 2.绘制提取的ROI区域 r:58 // 旋转矩形的中心点坐标…

内网和外网有什么区别?如何将内网ip端口地址映射到外网用?

由于局域网的使用&#xff0c;区分出了内网和外网两种概念。以路由器为核心&#xff0c;可以将多台电脑组建成一个局域网&#xff0c;局域网之内的网络便是内网。内网是有距离限制的&#xff0c;只有在路由器信号范围内的电脑才能接入局域网&#xff0c;否则需要进行内网穿透技…

Git仓库的原理理解

国内外主流的 Git 代码托管平台 (持续更新) - JetsungChan - 博客园 .gitignore文件讲解( 忽略规则文件 )[重点] (主要目的是为了节省空间 , 不必要的文件不要管他 , 忽略掉) 重复文件的云储存(只会上传一份) (所以不要怕stm32每个工程文件 , 有几十M , 全部上传会太大 . 实际…

011 Linux进程

&#x1f984; 个人主页: 小米里的大麦-CSDN博客 &#x1f38f; 所属专栏: Linux_小米里的大麦的博客-CSDN博客 &#x1f381; GitHub主页: 小米里的大麦的 GitHub ⚙️ 操作环境: Visual Studio 2022 文章目录 深入理解 Linux 进程管理一、管理哲学/本质&#xff1a;先描述&am…

星型模型(Star Schema)

在数据仓库的体系概念中&#xff0c;星型模型&#xff08;Star Schema&#xff09;和雪花模型&#xff08;Snowflake Schema&#xff09;是两种常见的数据模型&#xff0c;用于组织和结构化数据&#xff0c;以支持高效的查询和分析。 今天我们先介绍星型模型&#xff08;Star …

【RAG面试题】如何获取准确的语义表示

目录 回答模板 语义表示是干什么的&#xff1f; 如何获取准确语义表示的关键步骤&#xff1f; 1. 选择合适的 Embedding 模型 2. 正确的文本预处理与切分 3. 文本清洗与标准化 4. 构建合理的向量库 5. 检索质量验证与优化 详细知识点覆盖 面试回答技巧 回答模板…

小程序 API 开发手册:从入门到高级应用一网打尽

在移动互联网浪潮中&#xff0c;小程序已经成为企业服务用户的“第二战场”。不论是微信小程序、支付宝小程序&#xff0c;还是抖音小程序&#xff0c;都在强调一个核心能力&#xff1a;快速响应用户需求。而支撑小程序灵活运行和丰富功能的关键技术之一&#xff0c;正是小程序…

iwebsec靶场sqli注入(2)

​​​​​​06-宽字节注入 1&#xff0c;该漏洞的根本原因是字符集处理不一致&#xff08;GBK双字节特性&#xff09;与不安全的转义方式&#xff08;addslashes&#xff09;共同导致。构造基础sql注入语句 1%df%27%20%23 漏洞原理 字符集设置&#xff1a;mysql_query("S…

小程序学习笔记:自定义组件创建、引用、应用场景及与页面的区别

在微信小程序开发中&#xff0c;自定义组件是一项极为实用的功能&#xff0c;它能有效提高代码的复用性&#xff0c;降低开发成本&#xff0c;提升开发效率。本文将深入剖析微信小程序自定义组件的各个关键方面&#xff0c;包括创建、引用、应用场景以及与页面的区别&#xff0…

开发数字化绿色低碳园区系统:分阶段实施指南

目录 摘要 背景 核心模块 阶段性开发 分阶段开发实施 第一阶段(3-6个月):搭建核心骨架 第二阶段(6-9个月):扩展功能 第三阶段(9-12个月):深度定制 技术选型 注意事项 实施计划表 小结 摘要 数字化绿色低碳园区系统通过物联网、能源管理和数据分析等技术,…

智能实验室革命:Deepoc大模型驱动全自动化科研新生态

自动化实验执行 自动化实验执行通过机器人技术与智能控制系统的深度融合&#xff0c;重构传统实验操作模式&#xff0c;其核心技术突破体现在以下层面&#xff1a; 1. ​​多模态任务分解与执行架构​​ 基于大模型的任务解析引擎可将复杂实验流程分解为可执行的原子操作序列…

还在手动部署?用Jenkins+Docker+Git实现自动化CI/CD

“每次发版都要手动打包上传&#xff0c;部署宕机了才发现出错&#xff1f;” 你还在重复“开发提测-打包部署-验证回归”的流水线操作&#xff1f;明明可以一键搞定的流程&#xff0c;为何还在亲力亲为&#xff1f;是时候了解并掌握 自动化 CI/CD 的真正威力了&#xff01; 手…

Stream流中间方法的使用

Stream流的中间方法详解 Stream流的中间方法指那些返回新Stream的操作&#xff0c;允许链式调用。这些方法通常用于数据过滤、映射、排序等操作&#xff0c;不会触发最终计算。 filter方法 filter用于筛选满足条件的元素&#xff0c;接受一个Predicate函数式接口参数。 Lis…

华为云Flexus+DeepSeek征文|华为云ModelArts结合FeedMe:开启AI驱动的RSS阅读新时代

华为云FlexusDeepSeek征文&#xff5c;华为云ModelArts结合FeedMe&#xff1a;开启AI驱动的RSS阅读新时代 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架构 二、FeedMe…

华为云Flexus+DeepSeek征文 | 华为云ModelArts Studio新手入门:DeepSeek服务的配置与使用详解

华为云FlexusDeepSeek征文 | 华为云ModelArts Studio新手入门&#xff1a;DeepSeek服务的配置与使用详解 前言一、ModelArts Studio介绍1. 华为云ModelArts Studio简介2. 华为云ModelArts Studio主要特点3. 华为云ModelArts Studio主要使用场景 二、ModelArts Studio平台开通De…

Note2:机器学习基本攻略(Machine Learning by Hung-yi Lee)

目录 基本思路 1.训练资料上loss很大 1.1 model bias 1.2 optimazation&#xff08;优化不够好&#xff09; 1.3如何确定是 model bias还是optimazation 解决方法 2.训练资料上loss很小 2.1 Overfitting 解决方案 1.使用更多训练资料 2.限制模型 2.2 Mismatch 3.…