寻找模块的Prism示例将自己加载到菜单中

Edw*_*uay 12 wpf containers prism bootstrapper

有没有人知道使用Prism的WPF代码示例,其中每个模块在另一个模块的菜单中将自己注册为menuitem?

(我目前有一个应用程序尝试使用EventAggregator执行此操作,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等​​我想找到一个使用经典Prism结构来做这个的例子.)

我在考虑这个问题:

Shell.xaml:

<DockPanel>
    <TextBlock Text="Menu:" DockPanel.Dock="Top"/>
    <Menu 
        Name="MenuRegion" 
        cal:RegionManager.RegionName="MenuRegion" 
        DockPanel.Dock="Top"/>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

合同视图:

<UserControl x:Class="ContractModule.Views.AllContracts"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MenuItem Header="Contracts">
    </MenuItem>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

客户观点:

<UserControl x:Class="CustomerModule.Views.CustomerView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MenuItem Header="Customers">
    </MenuItem>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

但是要知道我已经完成了非Prism MVVM应用程序结构,并且Menus总是很好地绑定到ViewModel中的ObservableCollections,上面似乎打破了这个漂亮的模式.以上是在Prism中做到这一点的习惯方式吗?

And*_*mes 14

更新:

我为你创建了一个样本.它在这里:样品

它有一些你可能还没想过的东西,比如允许你的模块控制你的shell的合同(所以你可以做像Open Window这样的东西).它的设计考虑了MVVM ......如果您使用它,我不知道,但我会考虑它.

我尝试了几分钟才能让标签标题正确,但我最后还是留下了"A Tab".如果您使用选项卡式UI,它将作为练习留给您.我将它设计为无外观,因此您可以在不破坏任何内容的情况下替换Shell.xaml中的XAML.如果你正确使用它,这是RegionManager的优点之一.

无论如何,祝你好运!


我从未见过这样的例子,但你必须自己实现这个.

你必须创建自己的界面,如下所示:

public interface IMenuRegistry
{
     void RegisterViewWithMenu(string MenuItemTitle, System.Type viewType);
}
Run Code Online (Sandbox Code Playgroud)

然后,您的模块将声明对IMenuRegistry的依赖并注册其视图.

您可以将IMenuRegistry(您可能实现并在托管Bootstrapper的同一项目中注册)的实现添加到菜单或树视图或菜单中使用的任何菜单项.

当用户点击某个项目时,您必须使用您的Bootstrapper.Container.Resolve(viewType)方法创建一个视图实例,并将其填入您想要显示的任何占位符中.

  • 你的链接404's. (2认同)
  • @anderson-链接已断开,您能否共享代码? (2认同)