更新窗口数据。 WPF

时间:2012-10-25 13:32:36

标签: wpf module prism reload

我有一个带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(“”)。我发现我们无法重装模块的信息,这意味着只有当我们第一次点击“显示”按钮时才加载模块,但是我们如何更新视图上的数据呢?

1 个答案:

答案 0 :(得分:0)

我不确定我是否会完全遵循,但我会抓住这个。

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

让CreateShell成为您的MainWindow。然后,让MainWindow根据需要创建其他表单。如果您每次都需要新数据,则每次都可以new

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