22WPF----Prism框架

1.关于Prism框架

     官网:Prism Library      文档可以参考

     源码地址:https://github.com/PrismLibrary/Prism

     版本8.1

     Prism框架10+历史、微软,最新版本使用

2、功能说明

    Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器

3Prism框架关键程序

      Prism.Core :实现MVVM的核心功能,属于一个与平台无关的项目【Prism.dll】

      Prism.Wpf:包含了DialogServiceRegionModuleNavigation,其他的一些WPF的功能 【Prism.Wpf.dll】

      Prism.UnityPrism.Unity.Wpf.dll Prism.DryIoc.Wpf.dll

4、获取Prism框架

      Prism.dll                     Prism.Core

      Prism.Wpf.dll              Prism.Wpf

      Prism.Unity.Wpf.dll     Prism.Unity

      Prism.DryIoc.Wpf.dll   Prism.DryIoc

注:引入Prism.Unity包含Prism.dll和Prism.Wpf.dll

5、基本数据绑定方式

继承BindableBase类

、数据处理

ErrorsContainer

使用 

效果

7、命令状态检查

7.1基本命令

7.2 状态检查命令

第一种:利用BtnCheckCommand.RaiseCanExecuteChanged();进行触发检查过程

 注:需要在属性中加入RaiseCanExecuteChanged()方法

第二种:利用ObservesProperty进行属性的观察,当属性变化的时候进行状态检查

注:可以同时观察多个属性

第三种:通过ObservesCanExecute进行一个属性值的观察,进行动态的状态处理

 7.3异步命令

        public ICommand BtnAsyncCommand { get => new DelegateCommand<object>(DoExecute); }
        private async void DoExecute(object args)
        {
            await Task.Delay(3000);
            Value = 300;
        }

7.4事件转命令

           <ComboBox SelectedIndex="0">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="SelectionChanged">
                        <prism:InvokeCommandAction Command="{Binding BtnEventCommand}"
                                                   TriggerParameterPath="Handled"/>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
                <ComboBoxItem Content="11111"/>
                <ComboBoxItem Content="22222"/>
                <ComboBoxItem Content="33333"/>
                <ComboBoxItem Content="44444"/>
                <ComboBoxItem Content="55555"/>
            </ComboBox>
        // 事件转命令
        public ICommand BtnEventCommand { get => new DelegateCommand<object>(DoEventExecute); }
        private void DoEventExecute(object args)
        {
            Value = 300;
        }

注意:要引入这个命令空间

        xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:prism="http://prismlibrary.com/"

 8、Prism框架初始化

8.1 PrismBootstrapper

第一步:通过NuGet引入Prism.Unity

第二步:创建对象

    public class Bootstrapper : PrismBootstrapper
    {
        //返回一个主窗口
        protected override DependencyObject CreateShell()
        {
            //创建一个MainWindow的实例,进行窗口显示
            return Container.Resolve<MainWindow>();
        }
        //注册一些类型
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
           
        }
    }

第三步:注释掉默认的启动路径

<Application x:Class="WPFPrism框架初始化.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WPFPrism框架初始化"
             >
    <!--StartupUri="MainWindow.xaml"-->
    <Application.Resources>
         
    </Application.Resources>
</Application>

第四步:调用

    public partial class App : Application
    {
        public App()
        {
            new Bootstrapper().Run();
        }
    }

8.2 PrismApplication

第一步:

    注:加上 xmlns:prism="http://prismlibrary.com/" 

第二步:

 

 8.3 ViewModelLocator

帮助进行ViewViewModel的绑定

 

 

 注:

        - ViewModel与视图类型位于同一个程序集中

        - ViewModel位于.ViewModelsViewModel)子命名空间中

        - View位于.ViewsView)子命名空间中

        - ViewModel名称与视图名称对应,以“ViewModel结尾

9.ViewModelLocator匹配规则

9.1更改命名约定

WPFPrismViewModelLocaltor.Views.MainWindow

WPFPrismViewModelLocaltor.ViewModels.MainWindowViewModel

9.2解析匹配规则

本质上是将视图View的命名空间改成和Model一致

 9.3三不搭匹配

1、可能不在一个程序集    2、对象不在指定的目录    3、名称不匹配

10.IOC容器与依赖注入

 定义接口和接口实现类

 IoC容器的对象注册

 在ViewModel中拿到该接口对象

 11.事件聚合器

 

 

  同样在ViewModel中也能订阅事件

 订阅处理线程

 

 

 订阅事件过滤

12.Dialog子窗口处理

IDialogService-逻辑注入

IDialogAware-实现

IDialogWindow

第一步:新建用户控件

第二步:创建ViewModel,继承IDialogAware接口

第三步: 注册一个Dialog

 

 第四步:注入逻辑

13.自定义Dialog父窗口

第一步:创建父窗口,实现IDialogWindow接口

 第二步:注册窗口

 第三步:弹出窗口

 

 添加win2窗口

 

 ShowDialog()第二个参数

 

Dialog传参和回调的一个过程

 

14.Region基本定义

1ShellRegion

     Region的作用:确定功能区域;确保交互页面的内容更新

2Region的注册:

      - ContentControlRegionAdapter

      - ItemsControlRegionAdapter

      - SelectorRegionAdapter

      - TabControlRegionAdapter

      - 自定义Region

 3、Region与Navigation

      - 基本导航过程(3种方式)

      - 导航生命周期

      - 导航确认

      - 导航传参

      - 导航日志

 

15.自定义Region 

 

 

 ResizeMode=“NoResize”  去掉最下最大按钮

16.Region常用导航方式

 

 

 

 

17.导航参数 

 

 

 

  当从B导航到A时候,可以直接到达,当A导航到B时候,进入ViewModel的ConfirmNavigationRequest方法,从而控制是不是可以继续导航到B

参数传递

主视图

 

 18.导航日志

 19.复合命令

CompositeCommand

19.1单个视图中使用

 19.2多个视图中使用

创建接口

 实现接口

 注册全局复合命令

 在视图A、B中分别注册子命令

 

 在主视图中调用

 

20.模块化管理Moudule

添加WPF用户控件库

添加对应的Views

 添加Prism.Unity引用

添加一个继承IModule接口

 在主模块中注册子模块

第三种方式

 

 

 第四种使用配置文件

 

 在子模块中注册视图

 总结

按需加载子模块

 

 通过XML文件加载子模块

 

扫描当前运行子目录

 

窗口切换时 ,是否激活

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值