我应该为每个WPF窗口创建单独的Bootstrapper吗?

时间:2012-10-17 12:14:53

标签: wpf prism bootstrapper

我是WPF和Prism的新手。我想知道我是否应该为每个新窗口创建新的引导程序?例如,我有“Window1”,我从ListBox中选择元素,然后单击“ShowDetails”按钮,在新窗口“Window2”中,我应该看到我选择的细节。我有他们的窗口和模块,但我想知道如何以及在哪里为“Window2”注册模块“Module2”?

我的Bootstrapper示例。

class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        var mainWindow = new Window1();
        mainWindow.Show();
        return mainWindow;
    }

    protected override IModuleCatalog GetModuleCatalog()
    {
        var moduleCatalog = new ModuleCatalog();
        moduleCatalog.AddModule(typeof(Module1));

        return moduleCatalog;
    }
}

"App.xaml.cs"

public partial class App : Application
{
    public App()
    { 
        var bootstrapper = new Bootstrapper();
        bootstrapper.Run();
    }
}

1 个答案:

答案 0 :(得分:1)

Bootstrapper通常用在WPF应用程序的启动类中。通常这将是标准模板中的App.xaml.cs文件,它是App.xaml文件的代码隐藏类。您重写方法OnStartup并实例化您的Bootstrapper并调用其run方法。您可以延迟启动引导程序,直到覆盖OnStartup,而不是在App.xaml.cs类的构造函数中编写它。然后,您将在Prism中使用RegionManager并在XAML中定义区域。如果你有多个独立的Windows,这与Prism的使用方式有点不同。您可以在Prism源代码中的Bootstrapper类的CreateShell方法中定义MainWindow或Shell的概念。相反,有一个主窗口和定义区域,也许可以考虑创建一个机制来显示对话框中的其他窗口。可以将MainWindow分区为多个区域,并通过RegionManager注入用户控件。这是通过RegionManager的activate方法完成的。

通过阅读“模式与实践指南”开始,或者考虑观看Mike Taulty对Prism的视频。第一个视频在这里:

Prism & Silverlight: Part 1 - Taking Sketched Code Towards Unity

视频系列中有很多视频(总共10个)可以帮助您开始使用PRISM。

下面显示了如何在XAML中定义区域的示例:

<ItemsControl Regions:RegionManager.RegionName="MainRegion" />

可以激活PRISM区域,例如通过一个DelegateCommand或ICommand绑定到一个按钮是以下代码:

var viewA = new ViewA(); 
var regionA = (new RegionManager()).Regions["RegionA"]; 
regionA.Activate(viewA); 

您必须定义多个实现IModule接口的模块,并将这些模块添加到ModuleCatalog中,就像您已经使用ModuleA一样。