如何将作用域区域(管理器)暴露给 ViewModel

Posted

技术标签:

【中文标题】如何将作用域区域(管理器)暴露给 ViewModel【英文标题】:How to expose the scoped region(manager) to the ViewModel 【发布时间】:2020-03-05 13:13:31 【问题描述】:

我无法在 ViewModel 中获取 Scoped Region/RegionManager。在一个 Prism 项目(.NET Core 3、Prism 7.2)中,我在 OnInitialized Method 模块中创建了一个作用域区域管理器。

如何将其公开给模块中的 ViewModel(用于导航)?

【问题讨论】:

为什么首先需要一个作用域区域经理?通常,您可以使用已经存在的区域管理器。 【参考方案1】:

您可以简单地在视图模型的构造函数中传递 IRegionManager。 Prism 依赖注入系统将负责其余的工作。 不过,您首先要在 Container 上注册 regionManager。

private IRegionManager _regionManager;
public ViewModel(IRegionManager regionManager)

 _regionManager = regionManager;


public void Navigate()

 _regionManager.RequestNavigate(<regionName>, <viewName>);

【讨论】:

这行不通,除非您不需要真正的区域管理器,因为注册作用域管理器会覆盖它。 那么有什么建议的方法吗? 我肯定需要“全局”RegionManager(对于上面未提及的其他模块),所以有什么建议的方法吗?我可以定义某种本地范围(在一个模块内)服务,它可以注入到视图模型中并保存范围区域管理器吗?忘了说我将 Prism 7.2 用于 .net 核心,并且我正在使用在视图中暗示 ViewModelLocators 的 prism 模板。奇怪的是,我发现除了最简单的仅接触棱镜表面的样品之外,我很难找到其他样品。 要明确 - 如果您不使用作用域区域管理器,这将起作用。见我上面的评论 - 你为什么想要一个范围区域经理?您可以在没有范围区域管理器的情况下拥有范围区域。另外,如果您可以先查看模型,请执行此操作。视图模型定位器主要用于最顶层的视图。 非常感谢。我不喜欢视图优先,我会先尝试更改为视图模型。请提示如何在没有范围区域管理器的情况下拥有范围区域(我使用 Prism 有一段时间了,但之前从未有范围区域和区域名称冲突的可能性)

以上是关于如何将作用域区域(管理器)暴露给 ViewModel的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )

如何将 CKRecordZone 分配给 CKRecord

如何在 Prism 中为我的对话窗口设置区域管理器?

Commjs规范

前端:如何理解 JS 的作用域和作用域链?说说闭包的两个应用场景

如何将 Docker 网络暴露给主机?