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

时间:2015-10-29 21:40:59

标签: c# .net wpf prism

我正在使用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."

抛出异常

提前致谢!

1 个答案:

答案 0 :(得分:1)

这里有两件不同的事情:

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

CONTROLTEMPLATES: 这是Prism中的一个已知问题。这是你的修复:

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