wpf - Prism 库 - 在视图中获取范围区域
问题描述
我提出这个问题是为了了解 Prism Library 中的最佳实践。
基本上,我有一个MainView
(定义了范围区域)。在下面的代码片段中,我注册MainView
为Singleton,我这样做是为了解决并掌握 Scoped RegionManager。但是在解决的问题上,它再次构造了 MainView 实例。这真的很混乱,我不明白为什么?
早些时候,我的方法是从内部(范围内的 RegionManager 可用)导航到视图(例如NavViewA.xaml
--> TabNavigationRegion,ViewA.xaml
--> TabContentRegion),MainViewModel
但后来我看到@BrianLagunas视频解释说这样的绑定应该进入OnInitialized
一个被导航的视图在 ViewModel 中(这是一种错误的方法)。
关于如何解决此问题的任何说明。
public void OnInitialized(IContainerProvider containerProvider)
{
_regionManager.RequestNavigate<MainView>(RegionNames.TabRegion);
// here wanna get hold on ScopedRegionManager of MainView to do this
var view = containerProvider.Resolve<MainView>();
// but this above statement create a new instance of MainView despite being marked Singleton in RegisterTypes
var scopedRegionManager = RegionManager.GetRegionManager(view);
scopedRegionManager.RequestNavigate<NavViewA>(RegionNames.TabNavigationRegion);
scopedRegionManager.RequestNavigate<ViewA>(RegionNames.TabContentRegion);
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSingleton<MainView>();
containerRegistry.RegisterForNavigation<MainView>();
}
主视图.xaml
<UserControl x:Class="PrismDemo.Module.Core.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/"
xmlns:views="clr-namespace:PrismDemo.Core.Views;assembly=PrismDemo.Core"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<views:TabItemView />
</Grid>
</UserControl>
TabItemView.xaml
<UserControl x:Class="PrismDemo.Core.Views.TabItemView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:PrismDemo.Core"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="False">
<UserControl.Resources />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="40" />
<ColumnDefinition Width="2" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" prism:RegionManager.RegionName="{x:Static local:RegionNames.TabNavigationRegion}" />
<GridSplitter Grid.Column="1" Style="{StaticResource GridSplitterStyle}" />
<ContentControl Grid.Column="2" prism:RegionManager.RegionName="{x:Static local:RegionNames.TabContentRegion}" />
</Grid>
</UserControl>
解决方案
推荐阅读
- python - 标记字符串列表以返回一个标记的单词列表
- sql-server - 如何在 Mac 上正确设置 Django + MS SQL + Docker?
- java - Spring Boot 将蛇案例反序列化为骆驼案例失败。无法将“some_value”反序列化为“someValue”
- node.js - 如何修复 .save 不是 NodeJs 中猫鼬的功能
- angular - 如何使用 Angular 6 在表格分页上实现自动滑动?
- java - Cassandra 与 Java 尝试查询的所有主机都失败了
- python - 格式化numpy数组
- python - 如何获取json数据并将其转换为字符串
- node.js - NodeJS 集群,有用的用例?
- java - HackerRank Bon Appétit 问题未能通过两个测试用例