无名商城论坛

搜索
查看: 245|回复: 0

[其他技术] 【LSP】.NET Core 3 WPF MVVM框架 Pris

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 17:04:07 | 显示全部楼层 |阅读模式

本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用区域管理器对于View的管理
一.区域管理器#
我们在之前的Prism系列构建了一个标准式Prism项目,这篇文章将会讲解之前项目中用到的利用区域管理器更好的对我们的View进行管理,同样的我们来看看官方给出的模型图:


现在我们可以知道的是,大致一个区域管理器RegionMannager对一个控件创建区域的要点:

创建Region的控件必须包含一个RegionAdapter适配器
region是依赖在具有RegionAdapter控件身上的
其实后来我去看了下官方的介绍和源码,默认RegionAdapter是有三个,且还支持自定义RegionAdapter,因此在官方的模型图之间我做了点补充:


二.区域创建与视图的注入#
我们先来看看我们之前项目的区域的划分,以及如何创建区域并且把View注入到区域中:


我们把整个主窗体划分了四个区域:

ShowSearchPatientRegion:注入了ShowSearchPatient视图
PatientListRegion:注入了PatientList视图
FlyoutRegion:注入了PatientDetail和SearchMedicine视图
ShowSearchPatientRegion:注入了ShowSearchPatient视图
在Prism中,我们有两种方式去实现区域创建和视图注入:

ViewDiscovery
ViewInjection
1.ViewDiscovery#
我们截取其中PatientListRegion的创建和视图注入的代码(更仔细的可以去观看demo源码):

MainWindow.xaml:

Copy
<ContentControl Grid.Row="2" prism:RegionManager.RegionName="PatientListRegion" Margin="10"/>
这里相当于在后台MainWindow.cs:

Copy
RegionManager.SetRegionName(ContentControl, "PatientListRegion");
PatientModule.cs:

Copy
public class PatientModule : IModule
{
    public void OnInitialized(IContainerProvider containerProvider)
    {
         var regionManager = containerProvider.Resolve<IRegionManager>();
         //PatientList
         regionManager.RegisterViewWithRegion(RegionNames.PatientListRegion, typeof(PatientList));
         //PatientDetail-Flyout
         regionManager.RegisterViewWithRegion(RegionNames.FlyoutRegion, typeof(PatientDetail));
           
     }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
           
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表