Frage

Dies bezieht sich auf Composite Application Guidance für WPF oder Prism.

Ich habe eine "MainRegion" in meiner Schale. Meine verschiedenen Module werden in diesem Hauptbereich geladen werden. Ich kann eine Liste der verfügbaren Module in einem Menü füllen, und wählen Sie sie zu laden. Auf dem Klick auf das Menü ich tun:

var module = moduleEnumerator.GetModule(moduleName);
moduleLoader.Initialize(new[] { module });

Beim ersten Mal funktioniert alles ok, weil die Initialize () Methoden der Module ausgeführt werden, aber nach Module1, Module2 und Module3 initialisiert sind, passiert nichts, wenn ich klicken Sie erneut auf Module2 laden.

Meine Frage: Wie kann ich ein Modul bei Bedarf aktivieren, nach der Methode initialize ausgeführt wurde

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung

Sie aktivieren nicht tatsächlich das Modul. Sie aktivieren einen Blick in einer Region. Nehmen Sie eine Lese dieser Artikel rel="nofollow.

Die Initialize-Methode wird nur die einmal für jedes Modul aufgerufen. Die Tatsache, dass Sie einen Blick in das Modul sehen aktiviert wird, wenn Sie LoadModule- nenne ich denke, würde aufgrund der Tatsache ist, dass die Initilalize Verfahren eine Ansicht mit einer Region registriert. Dadurch wird die Ansicht aktivieren. Wenn Sie mehr als eine Ansicht hatte dann die letzte registrierte würde die aktive sein.

Um eine Ansicht aktivieren Sie die Activate-Methode der Region aufrufen müssen (unter der Annahme einer injizierten IUnityContainer und IRegionManager) ...

// Get a view from the container.
var view = Container.Resolve<MyView>();

// Get the region.
var region = RegionManager.Regions["MyRegion"];

// Activate the view.
region.Activate(view);

Je nach Art der Region Kontrolle wird dies entweder die Ansicht ersetzen, die es gibt oder, um es hinzuzufügen.

Andere Tipps

Sie können eine Ansicht entfernen, indem Regionen der Remove-Methode aufrufen.

public void RemoveViewFromRegion(string viewName, string regionName, object defaultView)
    {
      IRegion region = regionManager.Regions[regionName];
      object view = region.GetView(viewName);
      region.Remove(view);
      region.Activate(defaultView); 
    }

Sie sollten eine Contentcontrol, die Ihre Region sein wird. Dann müssen Sie alle Ihre Module zu dieser Region hinzuzufügen. Wenn Sie auf das Menü klicken, sollten Sie aktivieren verwenden (...) -Methode der Region, um das jeweilige Modul zu aktivieren.

Bedeutet dies, wenn Sie Modul aktivieren, dann werden andere Module, die durch sie überlagert werden können, sind auf Visibility.Collapsed?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top