【问题标题】:Update window data. WPF更新窗口数据。 WPF
【发布时间】:2012-10-15 16:57:20
【问题描述】:

我有一个使用 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("")。发现无法重新加载模块的信息,表示模块只有在第一次点击“显示”按钮时才会加载,但是如何更新视图上的数据呢?

【问题讨论】:

  • 可能只是我,但你的问题有点难以理解。尝试将其分成几段,并添加更多关于如何获取数据的详细信息。

标签: wpf module prism reload


【解决方案1】:

我不确定我是否完全遵循,但我会尝试一下。

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

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

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

【讨论】:

  • 我已经更改了 CreateShell,现在我只创建了 mainWindow。但是,当我创建 Form1 并尝试通过 ModuleManager 加载Module“Module1”时,我收到“找不到该区域”的异常。在调试模式下,我看到 regionManager 包含仅用于 mainWindow 的区域,没有放置在我的 Form1 上的区域。
  • 在加载模块之前我做code var regionManager = ServiceLocator.Current.GetInstance(); RegionManager.SetRegionManager(MyForm, regionManager);code 它解决了我的问题。
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多