【问题标题】:Prism RequestNavigate from PrismApplication immediately on startPrism RequestNavigate 从 PrismApplication 立即启动
【发布时间】:2018-10-26 09:36:35
【问题描述】:

Prism 7中,我可以像这样从IModuleRegisterForNavigationRequestNavigate

public class ModuleAModule : IModule
{
    public void OnInitialized(IContainerProvider containerProvider)
    {
        var regionManager = containerProvider.Resolve<IRegionManager>();
        regionManager.RequestNavigate("ContentRegion", "PersonList");
    }

    public void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<PersonList>();
    }
}

我知道我可以像这样从PrismApplication RegisterForNavigation

public partial class App : PrismApplication
{
    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<ViewA>();
    }
}

但是我怎样才能在开始时立即从PrismApplication RequestNavigate

我试过这个:

public class MainWindowViewModel : BindableBase
{
    public MainWindowViewModel(IRegionManager regionManager)
    {
        regionManager.RequestNavigate("ContentRegion", "ViewA");
    }
}

this.regions.CountRegionManager 中为0,来自Prism

private IRegion GetRegionByName(string regionName)
{
    return this.regions.FirstOrDefault(r => r.Name == regionName);
}

"ContentRegion" 肯定存在,因为如果我从IModule 尝试它会起作用,而且我知道PrismApplication 中的RegisterTypesMainWindowViewModel 构造函数之前执行。

我不知道自己错过了什么,也无法在任何示例或教程中找到答案。

感谢您的帮助!

【问题讨论】:

    标签: c# wpf mvvm prism


    【解决方案1】:

    您最好的选择是在您的应用程序中覆盖OnInitialized 并在那里进行导航。您可以通过Container 属性访问容器以获取区域管理器。

    如果您使用引导程序,则可以覆盖 InitializeModules 并在那里导航。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2021-12-07
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多