Prism使用笔记

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  
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值