有没有人知道使用Prism的WPF代码示例,其中每个模块在另一个模块的菜单中将自己注册为menuitem?
(我目前有一个应用程序尝试使用EventAggregator执行此操作,因此一个模块侦听来自其他模块的已发布事件,这些模块需要在菜单中将其标题作为菜单项,但我遇到了订单问题加载和线程等我想找到一个使用经典Prism结构来做这个的例子.)
我在考虑这个问题:
Shell.xaml:
合同视图:
客户观点:
但是要知道我已经完成了非Prism MVVM应用程序结构,并且Menus总是很好地绑定到ViewModel中的ObservableCollections,上面似乎打破了这个漂亮的模式.以上是在Prism中做到这一点的习惯方式吗?
更新:
我为你创建了一个样本.它在这里:样品
它有一些你可能还没想过的东西,比如允许你的模块控制你的shell的合同(所以你可以做像Open Window这样的东西).它的设计考虑了MVVM ......如果您使用它,我不知道,但我会考虑它.
我尝试了几分钟才能让标签标题正确,但我最后还是留下了"A Tab".如果您使用选项卡式UI,它将作为练习留给您.我将它设计为无外观,因此您可以在不破坏任何内容的情况下替换Shell.xaml中的XAML.如果你正确使用它,这是RegionManager的优点之一.
无论如何,祝你好运!
我从未见过这样的例子,但你必须自己实现这个.
你必须创建自己的界面,如下所示:
public interface IMenuRegistry { void RegisterViewWithMenu(string MenuItemTitle, System.Type viewType); }
然后,您的模块将声明对IMenuRegistry的依赖并注册其视图.
您可以将IMenuRegistry(您可能实现并在托管Bootstrapper的同一项目中注册)的实现添加到菜单或树视图或菜单中使用的任何菜单项.
当用户点击某个项目时,您必须使用您的Bootstrapper.Container.Resolve(viewType)
方法创建一个视图实例,并将其填入您想要显示的任何占位符中.