我有一个带PRISM的WPF项目。在我的引导程序中,我有以下代码。
protected override DependencyObject CreateShell()
{
Form1 form1= new Form1();
Form2 form2= new Form2();
var mainWindow = new MainWindow();
mainWindow.Show();
mainWindow.Activate();
RegionManager.SetRegionManager(form1, this.Container.Resolve<IRegionManager>());
RegionManager.SetRegionManager(form2, this.Container.Resolve<IRegionManager>());
RegionManager.UpdateRegions();
return mainWindow;
}
protected override IModuleCatalog GetModuleCatalog()
{
var moduleCatalog = new ModuleCatalog();
moduleCatalog.AddModule(typeof(MainModule));
moduleCatalog.AddModule(typeof(Form1Module), InitializationMode.OnDemand);
moduleCatalog.AddModule(typeof(Form2Module), InitializationMode.OnDemand);
return moduleCatalog;
}
在MainForm上我有ListBox
和按钮。当我们在ListBox
中选择一个项目并单击“显示”按钮时,form1会显示一些数据并且mainWindow会被隐藏。 Form1还有“Go to Main”按钮,当用户点击它时我会form1.Hide()
(隐藏带数据的form1)和mainWindow.Show()
(再次显示mainWindow)。在mainWindow用户中选择{{1}中的另一个项目单击“显示” - 显示form1,它应显示新数据,因为用户在mainWindow上选择了新项,但form1显示旧数据(第一次加载form1模块时显示的数据)。
示例 - 在mainWindow上我们有ListBox和一些公司的办公室列表,我们选择“Office1”并单击“显示”,这个mainWindow隐藏和form1加载,form1显示“Office1”的费用列表。当我在mainWindow上选择另一个办公室时,例如“Office2”form1应显示“Office2”的费用,但它显示“Office1”的费用。
当用户点击mainWindow上的“显示”按钮时,我会执行moduleManager.LoadModule(“”)。我发现我们无法重装模块的信息,这意味着只有当我们第一次点击“显示”按钮时才加载模块,但是我们如何更新视图上的数据呢?
答案 0 :(得分:0)
我不确定我是否会完全遵循,但我会抓住这个。
CreateShell应仅适用于您的主窗口。 Prism使用它来设置应用程序的第一个窗口。我在这里看到制作多个可视窗口的唯一原因是启动画面。
让CreateShell成为您的MainWindow。然后,让MainWindow根据需要创建其他表单。如果您每次都需要新数据,则每次都可以new
。
你问题的LoadModule部分也有点令人困惑。 ModuleManager是一种允许您获取应用程序的一部分而无需硬引用的方法。