个人的一点理解——
一个比较重要的概念:IRegionManager,全局管理区域,包括管理在Mudlue中注册的视图;View和ViewModel之间通过ViewName字符串来解耦;
在使用上,分为三步:
第一步:注册视图,往IContainer中注册一堆窗体、导航页等;
格式:[View,ViewModel][ViewName]
containerRegistry.RegisterDialog<View,ViewModel>(ViewName);
containerRegistry.RegisterForNavigation<View,ViewModel>(ViewName);
第二步:定义区域,在前台承接的View的某一区域,放置一个ContentControl,设置区域名称RegionName="ContentRegion1"
<ContentControl prism:RegionManager.RegionName="ContentRegion1"/>
第三步:建立关联,在ViewModel中使用区域管理器IRegionManager.RequestNavigate导航;
参数1:区域名称“ContentRegion1”;参数2:导航页名称[ViewName]
或者直接使用Container.Resolve<IDialogService>.ShowDialog(ViewName,Action<IDialogResult> callback),从Container中取到ViewName并显示弹窗;
//导航至新页面
IRegionManager.RequestNavigate("ContentRegion1",ViewName);
//弹窗
Container.Resolve<IDialogService>.ShowDialog(ViewName,Action<IDialogResult> callback);
关于模块(Mudlue)
模块内部也是遵循上述注册方式;模块可选择性的加载到Shell中;
关于发布订阅
prism事件聚合器