[英]How to add PRISM modules to Toolbar using MEF and MVVM
我将PRISM 4.0和MEF用作容器。 我在Shell中定义了2个区域,即ToolBar和MainRegion。 使用自定义的RegionBehaviour-AutoPopulateExportedViewsBehaviour,使用我的ToolBarModule自动填充工具栏区域。 我的MainRegion可以包含1个或多个View模块,这些模块将通过第三方停靠布局管理器停靠。
我在创建工具栏按钮以代表应用程序中的可用视图时遇到麻烦。 我的想法是使用ToolBarService或Event模式,以便每个View模块都可以以分离的方式向ToolBar注册自己。
但是,直到我调用RegionManager.RegisterViewWithRegion ...,似乎没有调用我的View Module构造函数。
如何控制模块的初始化,以便它们可以在ToolBar中注册。 因此,允许他们添加按钮,但实际上不显示视图本身。 仅当单击刚刚注册的视图的按钮时,才会显示该视图。
谢谢
我如何控制模块的初始化,以便它们可以在ToolBar中注册但不能初始显示?
我不确定你的意思。
我了解您希望模块在加载时注册其自己的导航部分。 我有类似的情况,我在顶部有菜单栏,在下面有按钮栏。 每个模块在加载时-使用初始化代码插入自己的按钮/菜单:
public void Initialize()
{
this.RegionManager.RegisterViewWithRegion(RegionNames.Menu, typeof(NavigationView));
this.RegionManager.RegisterViewWithRegion(RegionNames.Toolbar, typeof(ToolbarNavigationView));
}
这些区域具有实际的按钮/项目,当按下按钮/项目时,它们会调用其他内容。 例如,这是NavigationViewModel
namespace IDATT.Module.SystemManager.ViewModels
{
using System;
using System.ComponentModel.Composition;
using Microsoft.Practices.Prism.Regions;
[Export]
public class NavigationViewModel
{
[Import]
public ISecurityService SecurityService { get; set; }
[Import]
public IRegionManager RegionManager { get; set; }
public void Mail()
{
this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MailView).Name, UriKind.Relative));
}
public void MaintainUser()
{
this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainUserView).Name, UriKind.Relative));
}
public void MaintainGroup()
{
this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainGroupView).Name, UriKind.Relative));
}
public void MaintainMailTemplate()
{
this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(MaintainMailTemplateView).Name, UriKind.Relative));
}
public void SetUpOptions()
{
this.RegionManager.RequestNavigate(RegionNames.Tabs, new Uri(typeof(SetUpSystemManagerOptionsView).Name, UriKind.Relative));
}
public void Logout()
{
this.SecurityService.Logout();
}
}
}
看起来我可以通过使用自定义RegionBehaviour来“强制”视图模块的构造函数。 在其中,我可以将视图模块转换为特定的基本视图或接口类型,然后调用a函数。 然后,这会将我的视图注册到工具栏,但不一定在应用程序的“主要”区域中显示该视图。
谢谢你的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.