我怎么能检测到Prism v6加载了所有模块?

时间:2017-11-01 09:17:17

标签: c# wpf prism-6

我有一个使用RadDocking(Telerik Wpf控件)和Prism.Unity v6.1.1的WPF桌面应用程序,目标是我想在加载所有模块时加载Docking的布局。我怎么能检测到所有模块都加载了没有ovverride InitializeModules()方法? 我想在shell.xaml.cs代码中调用我的load方法()。

1 个答案:

答案 0 :(得分:2)

您可以使用EventAggregator

<强>引导程序:

class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<MainWindow>();
    }

    protected override void InitializeShell()
    {
        Application.Current.MainWindow.DataContext = new MainWindowViewModel();
        Application.Current.MainWindow.Show();
    }

    protected override void InitializeModules()
    {
        base.InitializeModules();
        var eventAggregator = Container.Resolve<IEventAggregator>();
        eventAggregator.GetEvent<PubSubEvent<string>>().Publish("ModulesLoaded");
    }
}

<强>主窗口:

public partial class MainWindow : Window
{
    public MainWindow(IEventAggregator eventAggregator)
    {
        InitializeComponent();
        eventAggregator.GetEvent<PubSubEvent<string>>().Subscribe(OnMessage);
    }

    private void OnMessage(string s)
    {
        if (s == "ModulesLoaded")
        {
            //load your layout...
        }
    }
}

当然,您需要覆盖InitializeModules()方法,以便在模块初始化时能够执行某些操作。