Question

concerne Guidance Composite Application pour WPF ou prisme.

J'ai une « MainRegion » dans ma coquille. Mes différents modules seront chargés dans cette région principale. Je peux remplir une liste de modules disponibles dans un menu et les sélectionner pour charger. Sur le clic du menu que je fais:

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

La première fois que tout fonctionne bien, parce que les méthodes des modules initialize () sont exécutés, mais après Module1, Module2 et Module3 sont initialisés, rien ne se passe lorsque je clique pour charger Module2 à nouveau.

Ma question: comment puis-je activer un module sur demande, après sa méthode d'initialisation a été exécutée

Merci pour votre aide!

Était-ce utile?

La solution

Vous n'activez pas réellement le module. Vous activez une vue dans une région. Prenez une lecture de cette .

La méthode d'initialisation est appelée uniquement la fois pour un module. Le fait que vous voyez une vue dans le module étant activé lorsque vous appelez LoadModule je suppose est dû au fait que la méthode Initilalize enregistre une vue avec une région. Cela permettra d'activer la vue. Si vous aviez plus d'un point de vue alors le dernier inscrit est celui qui est actif.

Pour activer une vue que vous devez appeler la méthode Activate de la région (en supposant un IUnityContainer et IRegionManager injecté) ...

// 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);

En fonction du type de contrôle de la région cela soit remplacer la vue qui est là ou ajouter.

Autres conseils

Vous pouvez supprimer une vue en appelant la méthode Supprimer des régions.

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); 
    }

Vous devriez avoir un ContentControl qui sera votre région. Ensuite, vous devrez ajouter tous vos modules dans cette région. Lorsque vous cliquez sur le menu, vous devez utiliser Activer (...) la méthode de la région afin d'activer le module particulier.

Est-ce que cela signifie quand yuou activer le module, puis d'autres modules qui peuvent être chevauchées par celui-ci sont mis à Visibility.Collapsed?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top