我有一个使用RadDocking(Telerik Wpf控件)和Prism.Unity v6.1.1的WPF桌面应用程序,目标是我想在加载所有模块时加载Docking的布局。我怎么能检测到所有模块都加载了没有ovverride InitializeModules()方法? 我想在shell.xaml.cs代码中调用我的load方法()。
答案 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()
方法,以便在模块初始化时能够执行某些操作。