如何将作用域区域(管理器)暴露给 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 协程作用域构建器函数 )