1.事件聚合器的使用(不同的Module之间的通讯)
1.创建基于PubSubEvent类型的 的事件, public class MessageSentEvent : PubSubEvent<string>
2.在VM中注入事件聚合器接口IEventAggregator
3.通过事件聚合器的GetEvent方法获取事件聚合器的事件,调用Publis方法进行事件的发布_ea.GetEvent<MessageSentEvent>().Publish(“事件的发布”);
4.通过新的VM注入事件聚合器后,调用事件的SubScribe方法,传入实现的方法实现事件的订阅 _ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
2.一个区域有不同的视图可以直接注册,注册后激活不会重新初始化视图,相当于只是隐藏跟显示
3.视图可以使用IContainerExtension 进行容器注入以及使用,通过Container的Resolve可以获取视图,通过名称获取区域后可以往区域内添加视图,最后通过区域的Active方法可以激活对应视图
_region = _regionManager.Regions["ContentRegion"];
_region.Add(_viewA);
_region.Activate(_viewA);
4.Module有几种添加的途径,有APPconfig文件引入
代码引入
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule<ModuleA.ModuleAModule>();
}
直接引用
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve<IRegionManager>();
regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));
}
还有Xaml文件导入,以及手动加载
5.ViewModelLocation 的命名为ViewModels 和Views,需要在ViewModel中添加 prism:ViewModelLocator.AutoWireViewModel="True"
6.IActiveAware ,这个接口由于返回当前VM是否被激活的状态 bool IsActive { get; set; }以及激活事件的处理
7.CompositeCommand,复合命令,通过RegisterCommand(命令)的方式进行命令的注册使用
8.IEventAggregator 事件聚合器接口,以注入的方式实现事件聚合器,
_ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
9.INavigationAware 用于获取以及设定区域导航的状态 ,IConfirmNavigationRequest接口继承该接口
OnNavigatedTo方法:当导航到目标视图的时候会激活该方法
IsNavigationTarget方法:返回True表示当前导航的目标为该窗体;返回False表示重新生成导航的窗体,所有的窗体在切换的时候都会调用该方法判断是否为激活的控件
OnNavigatedFrom 方法:当目标从该视图离开后会激活该方法
10.实现通过导航实现自定义控件的添加的时候,传递对应的参数,
1.导航实现参数传递的方式:在调用RequestNavigate方法的时候增加传递参数集合到输入参数中(第三个输入参数)
void RequestNavigate(
string regionName,
string target,
NavigationParameters navigationParameters);
2.VM实现INavigationAware接口,通过接口方法获取NavigationContext navigationContext对象,
navigationContext.Parameters["person"] as Person; 通过naviContext对象的Parameters即可获取对应的参数对象
3.通过OnNavigatedTo方法将自定义控件在获取参数后将参数内容存到字段内,通过IsNavigationTarget方法判断当前保存的字段是否等于传入的参数,等于该名字的时候或者不存在该名字的时候返回True(名字唯一)
11.IConfirmNavigationRequest 继承 INavigationAware 接口并实现方法 void ConfirmNavigationRequest(
NavigationContext navigationContext,
Action<bool> continuationCallback); 该方法用于导航的离开确认,当选择导航离开当前界面的时候,可以通过回调函数,传入True表示允许离开,False表示取消导航命令
12. 可以通过区域管理器的区域的区域(regions)进行区域变更的_regionManager.Regions.CollectionChanged += Regions_CollectionChanged进行区域改变的事件处理,当添加了区域后会自动触发事件处理啊器 ,例如 <ContentControl prism:RegionManager.RegionName="ContentRegion" Margin="5" /> 这个位置也定义了区域,所以会触发事件变更
获取区域后可以通过 region.Views.CollectionChanged += Views_CollectionChanged; 监控区域的视图集合
当控件VM继承IRegionMemberLifetime接口后,设置了KeepAlive属性为False后,当注册区域视图的集合变更后会自动移除 ,这个适合需要进行区域内视图清除的场景
13.INotifyCollectionChanged 接口里面定义了事件CollectionChanged ,可以通过该事件去监控集合的添加以及移除!!!
14. IRegionNavigationJournal接口 :该接口定义了区域的导航的前进以及返回,可以通过导航上下文获取的导航服务的Journal进行Journal的获取 navigationContext.NavigationService.Journal;
获取后可以通过Journal的GoFoward 以及GoBack方法快速的进行页面切换
15 .弹窗的使用:
1.全局弹窗窗体的注册:使用容器的RegisterDialog方法进行 containerRegistry.RegisterDialog<NotificationDialog, NotificationDialogViewModel>();
2.弹窗服务的注入以及使用:IDialogService 通过日志服务的构造函数注入方式获取dialogService,使用dialogService的ShowDialog方法进行弹窗以及弹窗的回调函数的获取,根据回调函数的Result获取结果
3.弹窗的VM初始化:实现IDialogAware接口,实现接口的方法OnDialogOpened CanCloseDialog OnDialogClosed RequestClose