非主界面使用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);
 }