在.NET 3.5 WPF应用程序的某些部分使用Prism 2x

时间:2012-07-26 19:07:05

标签: c# wpf prism

我有现有的WPF应用程序。在这个应用程序中,我有主TabControl,在这个TabControl下我有多个选项卡。

我想只在一个标签中应用Prism架构。我想将Shell创建为一个选项卡。

可以申请吗?如果是,我如何为该特定选项卡挂钩BootStrapper。在这种情况下,我想按需加载此选项卡。用户单击此选项卡时。我想通过BootStrapper加载所有UI元素,然后我想运行Shell

我可以使用UserControl_Loaded事件来触发我的引导程序吗?如果是,我如何实例化bootstrapper?

我希望问题是可以理解的。

2 个答案:

答案 0 :(得分:1)

它有效,但你必须手工做一些事情(特别是如果你想要模块工作)。 按照以下步骤操作:

首先用Bootstrapper,Shell等创建一个普通的Prism项目。 然后当你想要显示它时,获取带有这些区域的UserControl:

ServiceLocator.Current.GetInstance<TestUc>();

在UserControl的构造函数中,让ServiceLocator为您提供RegionManager作为参数,并在InitializeComponent()之后执行以下操作

RegionManager.SetRegionManager(this, regionManager);
RegionManager.UpdateRegions();

这将attatched依赖项属性设置为在Xaml中用作RegionManager.RegionName =“...”。 现在你可以通过RegionManager立即设置区域,或者拉起整个Prism基础设施来从config加载一些模块。假设你想要努力。 在UserControl的构造函数底部过去这段代码,模块将从App.config加载:

var catalog = new ConfigurationModuleCatalog
{
    Store = new ConfigurationStore()
};

var logger = new TextLogger();
var moduleInitializer = new ModuleInitializer(ServiceLocator.Current, logger);
var moduleManager = new ModuleManager(moduleInitializer, catalog, logger);

moduleManager.Run();

我在我的ftp服务器上为您上传了一个小测试项目:http://compositedevtec.tk/upload/prismTest.zip

答案 1 :(得分:0)

我不确定这会如何工作,因为引导程序用于启动shell。您可以通过将应用程序作为shell来完成此操作,并完成启动引导程序并将shell设置为主应用程序的过程。主应用程序将是您的WPF应用程序,但在应用程序内部的某个位置,您可以定义要使用的一个区域。

但是,我不认为只是在选项卡项中添加区域然后启动应用程序就行了。引导程序需要成为起始目标才能使所有IoC魔法发生。

简短回答:是的,对你如何编写shell有一些警告。