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中也能订阅事件
订阅处理线程
订阅事件过滤