gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:57:46 34 4
gpt4 key购买 nike

有谁知道使用 Prism 的 WPF 代码示例,其中每个模块都将自己注册为另一个模块内菜单中的菜单项?

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

我是这么想的:

Shell.xaml:

<DockPanel>
<TextBlock Text="Menu:" DockPanel.Dock="Top"/>
<Menu
Name="MenuRegion"
cal:RegionManager.RegionName="MenuRegion"
DockPanel.Dock="Top"/>
</DockPanel>

契约(Contract)查看:
<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>

客户浏览:
<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>

但据了解,我已经完成了非 Prism MVVM 应用程序结构,并且菜单总是很好地绑定(bind)到 ViewModel 中的 ObservableCollections ,上面似乎打破了这个很好的模式。以上是Prism中的惯用方法吗?

最佳答案

更新:
我为你创建了一个样本。在这里:Sample (现在是死链接)
它有一些你可能还没有想到的东西,比如一个允许你的模块控制你的 shell 的合约(这样你就可以做像打开窗口这样的事情)。它的设计考虑到了 MVVM。我不知道你是否正在使用它,但我会考虑它。
我尝试了几分钟来让标签标题正确,但我最终离开了“A Tab”。如果您使用选项卡式 UI,则将其作为练习留给您。我将其设计为无外观,因此您可以在不破坏任何内容的情况下替换 Shell.xaml 中的 XAML。如果使用得当,这就是 RegionManager 的优势之一。
无论如何,祝你好运!

我从来没有见过这样的例子,但你必须自己实现。
您必须创建自己的界面,如下所示:

public interface IMenuRegistry
{
void RegisterViewWithMenu(string MenuItemTitle, System.Type viewType);
}
然后,您的模块将声明对 IMenuRegistry 的依赖并注册它们的 View 。
您对 IMenuRegistry 的实现(您可能会在托管 Bootstrapper 的同一项目中实现和注册)您会将这些菜单项添加到您的菜单或 TreeView 或您用于菜单的任何内容中。
当用户点击一个项目时,您必须使用您的 Bootstrapper.Container.Resolve(viewType)方法来创建 View 的实例并将其填充到您想要显示的任何占位符中。

关于wpf - 寻找将自身加载到菜单中的模块的 Prism 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1152282/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com