C# 使用Prism,如何将作用域RegionManager注入服务?
我正在开发一个Prism应用程序,它包含一个C# 使用Prism,如何将作用域RegionManager注入服务?,c#,wpf,prism,tabcontrol,region,C#,Wpf,Prism,Tabcontrol,Region,我正在开发一个Prism应用程序,它包含一个TabControl,其中包含几个子区域。因此,根据Brian Lagunas在其PluralSight课程中描述的模式,我实现了一个自定义RegionBehavior,该课程在中找到并注入了一个自定义RegionNavigationContentLoader(也在前面的课程中描述),以确保我没有异常,并且可以在TabControl的几个选项卡上具有相同名称的区域 对于无法访问PluralSight的用户: 我实现了一个监视区域的视图集合的行为,当它发
TabControl
,其中包含几个子区域。因此,根据Brian Lagunas在其PluralSight课程中描述的模式,我实现了一个自定义RegionBehavior,该课程在中找到并注入了一个自定义RegionNavigationContentLoader(也在前面的课程中描述),以确保我没有异常,并且可以在TabControl的几个选项卡上具有相同名称的区域
对于无法访问PluralSight的用户:
我实现了一个监视区域的视图集合的行为,当它发生更改时,检查添加的视图或其DataContext是否实现了特定接口。如果检测到此接口,它会将作用域RegionManager设置为该接口的属性,因此进入作用域的所有视图都可以知道其作用域RegionManager
但是,我也有一些服务需要此作用域RegionManager,以便导航到TabControl中的子区域
由于我在容器中创建此服务,它将注入全局RegionManager,而不是作用域管理器
我的问题是:
TabControl
组成,其中每个TabItems都包含一个分析
分析始终由选定的可视化组成,可在右上框中选择。当一个可视化被选中时,它会在一个服务中被激活,该服务主要调用代码来生成可视化,检查设置的有效性等
然后,可视化应显示在可视化区域中,可视化特定设置应显示在设置区域中
我的计划是从服务内部导航到这两个区域
由于无法预先生成可视化(在显示之前必须始终执行一些检查),我无法直接从视图/视图模型导航。即使可能,显示所有可视化类型的视图也不知道作用域RegionManager,因为它是合成视图的一部分(父视图是知道的,当然可以将作用域RegionManager注入其子视图,但在我看来,这就像一种代码气味)
这种类型的应用程序可能不适合Prisms导航方法,或者你知道我如何重新构造我的应用程序以更好地适应Prism吗?你将无法将作用域管理器插入到你的服务中。见鬼,你甚至无法将作用域管理器插入到Viewmodel中,这就是你需要的原因首先要获得它的自定义行为
我将使可视化类型成为主选项卡视图的一部分。我看不出有任何理由将其作为一个单独的区域。这将允许您访问范围区域管理器,您现在可以将视图导航到VisualizationRegion。服务应该不了解区域管理器。只需响应可视化区域管理器即可类型选择发生变化,调用所需的服务,获得结果,并进行相应的导航。如果您确实需要在ScopedRegionManager上执行逻辑,除了Brians回答之外,我建议您使用两种方法
谢谢你的回复。我已经怀疑我不能将SRM注入到我的服务中,但我希望像IRegionAware这样的模式能够实现这一点。我扩展了我的问题,以使我的要求(希望)更清楚一点。也许你有什么想法?
public static IRegionManager NavigateView(this IRegionManager regionManager, string regionName, string view, NavigationParameters parameters = null)
{
var navigationUri = new Uri(view, UriKind.Relative);
regionManager.RequestNavigate(regionName, navigationUri, parameters);
return regionManager;
}