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には[メインに移動]ボタンもあります。ユーザーがクリックすると(フォームform1.Hide()1をデータで非表示にします)、mainWindow.Show()(再びメインウィンドウを表示します)。メインウィンドウで、ユーザーはから別のアイテムを選択して[ListBox表示]をクリックします。フォーム1が表示されます。ユーザーがmainWindowで新しい項目を選択したが、form1は古いデータ(form1のモジュールが初めてロードされたときに表示されたデータ)を表示するため、新しいデータを表示します。

例-mainWindowに、ある会社のオフィスのリストを含むListBoxがあり、「Office1」を選択して「Show」をクリックすると、このmainWindowが非表示になり、form1が読み込まれ、form1に「Office1」の経費リストが表示されます。mainWindowで別のオフィスを選択すると、たとえば「Office2」form1には「Office2」の経費が表示されますが、「Office1」の経費が表示されます。

ユーザーがmainWindowの[表示]ボタンをクリックすると、moduleManager.LoadModule( "")を実行します。モジュールをリロードできないという情報を見つけました。これは、初めて[表示]ボタンをクリックしたときにのみモジュールがロードされることを意味しますが、ビューのデータを更新するにはどうすればよいですか?

4

1 に答える 1

0

完全にフォローしているかどうかはわかりませんが、これを突き刺します。

CreateShell は、メイン ウィンドウのみに使用する必要があります。Prism はこれを使用して、アプリケーションの最初のウィンドウをセットアップします。ここで複数のビジュアル ウィンドウを作成する唯一の理由は、スプラッシュ スクリーンのためです。

そのため、CreateShell で MainWindow を作成します。次に、必要に応じて MainWindow に他のフォームを作成させます。毎回新しいデータが必要な場合は、new毎回それらをアップできます。

あなたの質問の LoadModule 部分も少し混乱しています。ModuleManager は、ハード リファレンスを必要とせずにアプリケーションの一部を取得できるようにする方法です。

于 2012-10-29T17:45:13.637 に答える