非主界面使用Region时,需要特殊处理,否则无法找region
示例:
1、在Module的View里使用Region的方法
填充Region后不再,切换
.xaml
<ContentControl x:Name="groupRegion" Margin="10,5,5,5" prism:RegionManager.RegionName="RegionName"/>
.cs
public MainForm(IRegionManager regionManager, IContainerProvider provider)
{
InitializeComponent();
//新页面需要手动加入RegionManger,并更新
RegionManager.SetRegionManager(groupRegion, provider.Resolve<IRegionManager>());
RegionManager.UpdateRegions();
regionManager.RegisterViewWithRegion("RegionName", typeof(ViewA));
}
2、填充Region后,还需要动态切换Region内容
需要用到导航
module.cs
public class PersonModule : ModuleBase
{
public PersonModule(IRegionManager regionManager)
: base(regionManager)
{
}
public override void OnInitialized(IContainerProvider containerProvider)
{
}
public override void RegisterTypes(IContainerRegistry containerRegistry)
{
//注册导航
containerRegistry.RegisterForNavigation<PersonBaseInfo>(NavigateNames.NewPersonBaseInfo);
containerRegistry.RegisterForNavigation<PersonHomeInfo>(NavigateNames.NewPersonHomeInfo);
containerRegistry.RegisterForNavigation<PersonCompany>(NavigateNames.NewPersonCompany);
containerRegistry.RegisterForNavigation<PersonOthers>(NavigateNames.NewPersonOthers);
}
}
.xaml
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center">
<Button
Margin="5"
Content="上一步"
Command="{Binding PreviousClick}"
Visibility="{Binding ShowPrevious,Converter={StaticResource boolConverter}}"/>
<Button
Margin="5"
Content="下一步"
Command="{Binding NextClick}"
Visibility="{Binding ShowNext,Converter={StaticResource boolConverter}}"/>
<Button
Margin="5"
Content="确定"
Command="{Binding OKClick}"
Visibility="{Binding ShowOK,Converter={StaticResource boolConverter}}"/>
</StackPanel>
<ContentControl x:Name="contentRegion" DockPanel.Dock="Top" Background="Green" prism:RegionManager.RegionName="{x:Static core:RegionNames.NewPersonRegion}"/>
.cs
public partial class NewPersonIndex : UserControl
{
public NewPersonIndex(IRegionManager regionManager, IContainerProvider provider)
{
InitializeComponent();
//通过对话框打开界面时,View中的Region需要动态写入Region Manager
RegionManager.SetRegionManager(contentRegion, provider.Resolve<IRegionManager>());
RegionManager.UpdateRegions();
}
}
viewmodel
private void GotoBaseInfo()
{
var para = new NavigationParameters();
para.Add("model", _newPersonModel.BaseInfo);
_regionManager.RequestNavigate(RegionNames.NewPersonRegion, NavigateNames.NewPersonBaseInfo, para);
}
private void GotoHomeInfo()
{
var para = new NavigationParameters();
para.Add("model", _newPersonModel.HomeInfo);
_regionManager.RequestNavigate(RegionNames.NewPersonRegion, NavigateNames.NewPersonHomeInfo, para);
}
private void GotoOthersInfo()
{
var para = new NavigationParameters();
para.Add("model", _newPersonModel.OthersInfo);
_regionManager.RequestNavigate(RegionNames.NewPersonRegion, NavigateNames.NewPersonOthers, para);
}
private void GotoCompanyInfo()
{
var para = new NavigationParameters();
para.Add("model", _newPersonModel.CompanyInfo);
_regionManager.RequestNavigate(RegionNames.NewPersonRegion, NavigateNames.NewPersonCompany, para);
}