C#   发布时间:2022-04-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

--概述

这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表中开始。每个示例都基于前一个示例的概念。

此项目平台框架:.NET Core 3.1

Prism版本:8.0.0.1909

提示:这些项目都在同一解决方法下,需要依次打开运行,可以选中项目-》右键-》设置启动项目,然后运行:

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

 

 

 

目录介绍

@H_254_30@modules with App.config @H_254_30@modules with Code @H_254_30@modules with Directory @H_254_30@modules loaded manually @H_489_197@
Topic 描述
Bootstrapper and the SHell 创建一个基本的引导程序和sHell
Regions 创建一个区域
Custom Region Adapter 为StackPanel创建自定义区域适配器
View Discovery 使用视图发现自动注入视图
View Injection 使用视图注入手动添加和删除视图
View Activation/Deactivation 手动激活和停用视图
使用应用加载模块。配置文件
使用代码加载模块
从目录加载模块
使用IModuleManager手动加载模块
ViewModelLocator 使用ViewModelLocator
ViewModelLocator - Change Convention 更改ViewModelLocator命名约定
ViewModelLocator - Custom Registrations 为特定视图手动注册ViewModels
DelegateCommand 使用DelegateCommand和DelegateCommand<T>
CompositeCommands 了解如何使用COR_244_11845@positeCommands作为单个命令调用多个命令
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启动界面:

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

 

 

 

这个主要演示Prism框架搭建的用法:

step1:在Nuget上引用Prsim.Unity

step2:修改App.xaml:设置引导程序

<Application x:Class="BootstrapperSHell.App"
             xmlns="http://scheR_244_11845@as.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://scheR_244_11845@as.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://scheR_244_11845@as.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://scheR_244_11845@as.microsoft.com/winfx/2006/xaml"
        title="SHell" Height="350" Width="525">
    <Grid>
        <ContentControl Content="Hello from Prism"  />
    </Grid>
</Window>

  ②ViewInjection:视图注册

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

@H_260_2@mainWindow.xaml:通过ContentControl 关联视图

<Window x:Class="ViewInjection.Views.MainWindow"
        xmlns="http://scheR_244_11845@as.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://scheR_244_11845@as.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:视图激活和注销

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

@H_260_2@mainWindow.xaml.cs:这里在窗体构造函数中注入了一个容器扩展接口和一个regin管理器接口,分别用来装载视图和注册regin,窗体的激活和去激活分别通过regions的Activate和Deactivate方法实现

public partial class MainWindow : Window
    {
        IContainerExtension _container;
        IRegionManager _regionManager;
        IRegion _region;

        ViewA _viewA;
        ViewB _viewB;

        public MainWindow(IContainerExtension container, IRegionManager regionManager)
        {
            InitializeComponent();
            _container = container;
            _regionManager = regionManager;

            this.Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs E)
        {
            _viewA = _container.Resolve<ViewA>();
            _viewB = _container.Resolve<ViewB>();

            _region = _regionManager.Regions["ContentRegion"];

            _region.Add(_viewA);
            _region.Add(_viewB);
        }

        private void Button_Click(object sender, RoutedEventArgs E)
        {
            //activate view a
            _region.Activate(_viewA);
        }

        private void Button_Click_1(object sender, RoutedEventArgs E)
        {
            //deactivate view a
            _region.Deactivate(_viewA);
        }

        private void Button_Click_2(object sender, RoutedEventArgs E)
        {
            //activate view b
            _region.Activate(_viewB);
        }

        private void Button_Click_3(object sender, RoutedEventArgs E)
        {
            //deactivate view b
            _region.Deactivate(_viewB);
        }
    }

  ④UsingEventAggregator:事件发布订阅

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

事件类定义:

public class messageSentEvent : PubSubEvent<String>
    {
    }

  注册两个组件:ModuleA和ModuleB

 protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
        {
            moduleCatalog.AddModule<ModuleA.ModuleAModule>();
            moduleCatalog.AddModule<ModuleB.ModuleBModule>();
        }

  @H_963_298@moduleAModule 中注册视图messageView

 public class ModuleAModule : IModule
    {
        public void OnInitialized(IContainerProvider containerProvider)
        {
            var regionManager = containerProvider.Resolve<IRegionManager>();
            regionManager.RegisterViewWithRegion("LeftRegion", typeof(messageView));
        }

        public void RegisterTypes(IContainerRegistry containerRegistry)
        {
            
        }
    }

  messageView.xaml:视图中给button俺妞妞绑定命令

<UserControl x:Class="ModuleA.Views.messageView"
             xmlns="http://scheR_244_11845@as.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://scheR_244_11845@as.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 中接收并显示接收到的消息:

 public class messageListViewModel : BindableBase
    {
        IEventAggregator _ea;

        private ObservableCollection<String> _messages;
        public ObservableCollection<String> messages
        {
            get { return _messages; }
            set { SetProperty(ref _messages, value); }
        }

        public messageListViewModel(IEventAggregator ea)
        {
            _ea = ea;
            messages = new ObservableCollection<String>();

            _ea.GetEvent<messageSentEvent>().Subscribe(messageReceived);
        }

        private void messageReceived(String messagE)
        {
            messages.Add(messagE);
        }
    }

  

以上就是这个开源项目比较经典的几个入门实例,其它就不展开讲解了,有兴趣的可以下载源码自己阅读学习。

源码下载

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全部内容,希望文章能够帮你解决C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: