C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism
--概述
這個項目演示了如何在WPF中使用各種Prism功能的示例。如果您剛剛開始使用Prism,建議您從第一個示例開始,按順序從列表中開始。每個示例都基于前一個示例的概念。
此項目平臺框架:.NET Core 3.1
Prism版本:8.0.0.1909
提示:這些項目都在同一解決方法下,需要依次打開運行,可以選中項目-》右鍵-》設置啟動項目,然后運行:
目錄介紹
| Topic | 描述 |
| Bootstrapper and the Shell | 創建一個基本的引導程序和shell |
| Regions | 創建一個區域 |
| Custom Region Adapter | 為StackPanel創建自定義區域適配器 |
| View Discovery | 使用視圖發現自動注入視圖 |
| View Injection | 使用視圖注入手動添加和刪除視圖 |
| View Activation/Deactivation | 手動激活和停用視圖 |
| Modules with App.config | 使用應用加載模塊。配置文件 |
| Modules with Code | 使用代碼加載模塊 |
| Modules with Directory | 從目錄加載模塊 |
| Modules loaded manually | 使用IModuleManager手動加載模塊 |
| ViewModelLocator | 使用ViewModelLocator |
| ViewModelLocator - Change Convention | 更改ViewModelLocator命名約定 |
| ViewModelLocator - Custom Registrations | 為特定視圖手動注冊ViewModels |
| DelegateCommand | 使用DelegateCommand和DelegateCommand<T> |
| CompositeCommands | 了解如何使用CompositeCommands作為單個命令調用多個命令 |
| IActiveAware Commands | 使您的命令IActiveAware僅調用激活的命令 |
| Event Aggregator | 使用IEventAggregator |
| Event Aggregator - Filter Events | 訂閱事件時篩選事件 |
| RegionContext | 使用RegionContext將數據傳遞到嵌套區域 |
| Region Navigation | 請參見如何實現基本區域導航 |
| Navigation Callback | 導航完成后獲取通知 |
| Navigation Participation | 通過INavigationAware了解視圖和視圖模型導航參與 |
| Navigate to existing Views | 導航期間控制視圖實例 |
| Passing Parameters | 將參數從視圖/視圖模型傳遞到另一個視圖/視圖模型 |
| Confirm/cancel Navigation | 使用IConfirmNavigationReqest界面確認或取消導航 |
| Controlling View lifetime | 使用IRegionMemberLifetime自動從內存中刪除視圖 |
| Navigation Journal | 了解如何使用導航日志 |
部分項目演示和介紹
① BootstrapperShell啟動界面:
這個主要演示Prism框架搭建的用法:
step1:在nuget上引用Prsim.Unity
step2:修改App.xaml:設置引導程序
<Application x:Class="BootstrapperShell.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:BootstrapperShell"><Application.Resources></Application.Resources> </Application>public partial class App : Application{protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);var bootstrapper = new Bootstrapper();bootstrapper.Run();}}step3:在引導程序中設置啟動項目:
using Unity; using Prism.Unity; using BootstrapperShell.Views; using System.Windows; using Prism.Ioc;namespace BootstrapperShell {class Bootstrapper : PrismBootstrapper{protected override DependencyObject CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){}} }step4:在MainWindow.xaml中顯示個字符串
<Window x:Class="BootstrapperShell.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Shell" Height="350" Width="525"><Grid><ContentControl Content="Hello from Prism" /></Grid> </Window>②ViewInjection:視圖注冊
MainWindow.xaml:通過ContentControl 關聯視圖
<Window x:Class="ViewInjection.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/"Title="Shell" Height="350" Width="525"><DockPanel LastChildFill="True"><Button DockPanel.Dock="Top" Click="Button_Click">Add View</Button><ContentControl prism:RegionManager.RegionName="ContentRegion" /></DockPanel> </Window>MainWindow.xaml.cs:鼠標點擊后通過IRegion 接口注冊視圖
public partial class MainWindow : Window{IContainerExtension _container;IRegionManager _regionManager;public MainWindow(IContainerExtension container, IRegionManager regionManager){InitializeComponent();_container = container;_regionManager = regionManager;}private void Button_Click(object sender, RoutedEventArgs e){var view = _container.Resolve<ViewA>();IRegion region = _regionManager.Regions["ContentRegion"];region.Add(view);}}③ActivationDeactivation:視圖激活和注銷
MainWindow.xaml.cs:這里在窗體構造函數中注入了一個容器擴展接口和一個regin管理器接口,分別用來裝載視圖和注冊regin,窗體的激活和去激活分別通過regions的Activate和Deactivate方法實現
④UsingEventAggregator:事件發布訂閱
事件類定義:
public class MessageSentEvent : PubSubEvent<string>{}注冊兩個組件:ModuleA和ModuleB
ModuleAModule 中注冊視圖MessageView
MessageView.xaml:視圖中給button俺妞妞綁定命令
<UserControl x:Class="ModuleA.Views.MessageView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" Padding="25"><StackPanel><TextBox Text="{Binding Message}" Margin="5"/><Button Command="{Binding SendMessageCommand}" Content="Send Message" Margin="5"/></StackPanel> </UserControl>MessageViewModel.cs:在vm中把界面綁定的命令委托給SendMessage,然后在方法SendMessage中發布消息:
using Prism.Commands; using Prism.Events; using Prism.Mvvm; using UsingEventAggregator.Core;namespace ModuleA.ViewModels {public class MessageViewModel : BindableBase{IEventAggregator _ea;private string _message = "Message to Send";public string Message{get { return _message; }set { SetProperty(ref _message, value); }}public DelegateCommand SendMessageCommand { get; private set; }public MessageViewModel(IEventAggregator ea){_ea = ea;SendMessageCommand = new DelegateCommand(SendMessage);}private void SendMessage(){_ea.GetEvent<MessageSentEvent>().Publish(Message);}} }在MessageListViewModel 中接收并顯示接收到的消息:
以上就是這個開源項目比較經典的幾個入門實例,其它就不展開講解了,有興趣的可以下載源碼自己閱讀學習。
源碼下載
github訪問速度較慢,所以我下載了一份放到的百度網盤
百度網盤鏈接:https://pan.baidu.com/s/10Gyks2w-R4B_3z9Jj5mRcA?
提取碼:0000
---------------------------------------------------------------------
開源項目鏈接:https://github.com/PrismLibrary/Prism-Samples-Wpf
技術群:添加小編微信并備注進群
小編微信:mm1552923 ??
公眾號:dotNet編程大全? ??
總結
以上是生活随笔為你收集整理的C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL语句之正则表达式
- 下一篇: Ackerman阿克曼函数的递归与非递归