1.关于Prism框架
官网:Prism Library 文档可以参考
源码地址:https://github.com/PrismLibrary/Prism
版本8.1
Prism框架10+历史、微软,最新版本使用
2、功能说明
Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序,包括MVVM、依赖注入、命令、事件聚合器
3、Prism框架关键程序
Prism.Core :实现MVVM的核心功能,属于一个与平台无关的项目【Prism.dll】
Prism.Wpf:包含了DialogService、Region、Module、Navigation,其他的一些WPF的功能 【Prism.Wpf.dll】
Prism.Unity:Prism.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类
6 、数据处理
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
帮助进行View与ViewModel的绑定
注:
- ViewModel与视图类型位于同一个程序集中
- ViewModel位于.ViewModels(ViewModel)子命名空间中
- View位于.Views(View)子命名空间中
- 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基本定义
1、Shell与Region
Region的作用:确定功能区域;确保交互页面的内容更新
2、Region的注册:
- 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文件加载子模块
扫描当前运行子目录
窗口切换时 ,是否激活