Prism框架實戰:WPF企業級開發全解

以下是一個完整的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.…