【问题标题】:MVVM Prism Nested Regions Can't Find Child RegionsMVVM Prism 嵌套区域找不到子区域
【发布时间】:2011-02-01 04:51:45
【问题描述】:

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

【问题讨论】:

    标签: mvvm menu prism regions


    【解决方案1】:

    上述 XAML 违背了 PRISM 区域的设计。

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

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

    【讨论】:

    • 那么有没有嵌套区域的方法?请查看this 评论以了解我的确切问题 - 请注意,这是该线程中的第三篇文章。谢谢!
    • 区域只是布局构建块。嵌套过程意味着您实际上需要可替换区域内的可替换区域。解决方案是像往常一样在顶级区域中注册视图,每个视图都包含其他区域定义。用户控件可以有区域,通常只是简单地插入未知来源提供的状态信息。
    • 我找到了答案。发布here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2017-11-01
    • 2016-07-29
    相关资源
    最近更新 更多