0

我有一个带有 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 会显示一些数据,并且主窗口被隐藏。Form1 也有按钮“Go to Main”,当用户单击它时,我会这样做form1.Hide()(用数据隐藏 form1)和mainWindow.Show()(再次显示 mainWindow)。在 mainWindow 上,用户从中选择另一个项目ListBox并单击“显示”-显示 form1,它应该显示新数据,因为用户在 mainWindow 上选择了新项目,但 form1 显示旧数据(第一次加载 form1 的模块时显示的数据)。

示例 - 在主窗口中,我们有一个列表框,其中包含一些公司的办公室列表,我们选择“Office1”并单击“显示”,此主窗口隐藏并加载 form1,form1 显示“Office1”的费用列表。当我在 mainWindow 上选择另一个办公室时,例如“Office2”form1 应该显示“Office2”的费用,但它显示“Office1”的费用。

当用户单击主窗口上的“显示”按钮时,我会执行 moduleManager.LoadModule("")。我发现无法重新加载模块的信息,这意味着模块只有在我们第一次单击“显示”按钮时才会加载,但是我们如何更新视图上的数据呢?

4

1 回答 1

0

我不确定我是否完全遵循,但我会对此进行尝试。

CreateShell 应该仅用于您的主窗口。Prism 使用它来设置应用程序的第一个窗口。我看到在这里制作多个可视窗口的唯一原因是为了启动闪屏。

所以让 CreateShell 制作你的 MainWindow。然后,让 MainWindow 根据需要创建其他表单。如果您每次都需要新数据,则每次都可以添加new它们。

您问题的 LoadModule 部分也有点令人困惑。ModuleManager 是一种让您无需硬引用即可获取应用程序部分的方法。

于 2012-10-29T17:45:13.637 回答