MVVM Prism嵌套区域无法查找子区域

时间:2010-03-26 14:08:21

标签: mvvm menu prism regions

我有一个菜单(Telerik RadMenu),它具有在Shell中定义的嵌套区域。在我的模块中,我将使用这些区域注册模块菜单或工具栏项。一切都适用于根区域,但是当我尝试向子区域添加内容时,例如菜单上的文件区域,我收到错误“异常消息是:区域管理器不包含FileMenuRegion区域”。

但就像我说的,如果我改变这段代码

regionManager.Regions[RegionNames.FileMenuRegion].Add(menuItem);

到这个

regionManager.Regions[RegionNames.MainMenuRegion].Add(menuItem);
一切正常。下面是我的菜单的XAML,因此您可以看到区域名称及其构造方式。任何帮助都会非常感激,因为这令人困惑,让我发疯。

菜单

    <telerikNavigation:RadMenu x:Name="menuMain" DockPanel.Dock="Top" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.MainMenuRegion}" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.CurrentTheme}">
            <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.File}" prismrgn:RegionManager.RegionName="{x:Static i:RegionNames.FileMenuRegion}">
                <telerikNavigation:RadMenuItem Header="{x:Static p:Resources.Exit}" Command="{Binding ExitCommand}">
                    <telerikNavigation:RadMenuItem.Icon>
                        <Image Source="../Resources/Close.png" Stretch="None" />
                    </telerikNavigation:RadMenuItem.Icon>
                </telerikNavigation:RadMenuItem>
            </telerikNavigation:RadMenuItem>
        </telerikNavigation:RadMenu>

1 个答案:

答案 0 :(得分:1)

上述XAML违反了PRISM地区的设计。

应该将所有区域附加到从ContentControl派生的控件。加载区域注册视图的过程将使用为该区域名称注册的任何匹配视图替换区域容器的内容。这将删除您的嵌套区域名称,以便您看到的错误是正确的。

这个想法是,为指定区域名称注册的视图本身可以包含其他区域。