如何在RegionManager中的用户控件或控件模板中注册区域



我正在使用IRegionManager加载和导航到视图,我在主视图中将内容加载到主区域没有问题,主视图是用我的引导程序类加载的,但我无法将内容加载到加载的视图中的区域,区域管理器似乎没有注册这些区域。

我的引导类:

protected override DependencyObject CreateShell()
{
    return this.Container.Resolve<MainWindowView>();
}
protected override void InitializeShell()
{
    Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
    base.ConfigureContainer();
    this.Container.RegisterTypeForNavigation<DocumentView>();
    this.Container.RegisterTypeForNavigation<EmailView>();
    this.Container.RegisterTypeForNavigation<WorkTypeSelectionView>();
}

DocumentView是另一个区域的用户控制,当命令被触发时运行的方法是:

private void ViewEmailAction()
{
    NavigationParameters parameters;
    parameters = new NavigationParameters();
    parameters.Add(nameof(this.CurrentEmail), this.CurrentEmail);
    this.regionManager.Regions[this.EmailRegion].RequestNavigate(nameof(EmailView), parameters);
}

这会引发消息"The region manager does not contain the EmailRegion region." 异常

提前感谢!

这里有两件不同的事情:

用户控制:这应该不涉及任何问题。很可能您正试图导航到尚未加载的视图中定义的区域。请确保在加载区域后导航到该区域。在ViewModel构造函数内部导航是这个问题的最大来源之一。如果你想把你的样本发布到GitHub,我可以看看。

控制模板:这是《棱镜》中的一个已知问题。这是你的解决方案:

http://southworks.com/blog/2011/11/10/regions-inside-datatemplates-in-prism-v4-using-a-region-behavior/

最新更新