Domanda

Questo si riferisce a Composite Application Guidance per WPF, o Prism.

Ho una "MainRegion" nel mio guscio. Miei vari moduli verranno caricati in questa regione principale. Posso compilare una lista dei moduli disponibili in un menu e selezionarle per caricare. Sul click del menu che faccio:

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

La prima volta tutto funziona bene, perché l'inizializzazione () i metodi dei moduli vengono eseguiti, ma dopo Module1, Module2 e Module3 vengono inizializzati, non succede nulla quando si fa clic per caricare nuovamente Module2.

La mia domanda: come posso attivare un modulo su richiesta, dopo il suo metodo initialize è stato eseguito

Grazie per il vostro aiuto!

È stato utile?

Soluzione

Non è effettivamente attivare il modulo. Si attiva una vista in una regione. Prendete una lettura di questo articolo .

Il metodo Initialize viene chiamato solo una volta per ogni modulo. Il fatto che si sta vedendo una vista nel modulo viene attivato quando si chiama LoadModule direi è dovuto al fatto che il metodo Initilalize sta registrando una vista con una regione. Questo attiverà la vista. Se tu avessi più di una vista poi l'ultimo registrato sarebbe quella attiva.

Per attivare la vista è necessario chiamare il metodo Activate della regione (assumendo un iniettato IUnityContainer e 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);

A seconda del tipo di controllo regione questo sostituire ritiene che ci sia o aggiungere ad esso.

Altri suggerimenti

È possibile rimuovere una visualizzazione chiamando il metodo Remove delle Regioni.

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

Si dovrebbe avere un ContentControl che sarà la vostra regione. Allora si avrà bisogno di aggiungere tutti i moduli a questa regione. Quando si fa clic sul menu si dovrebbe utilizzare il metodo della regione Attiva (...) al fine di attivare il modulo particolare.

Significa questo quando si attiva il modulo, quindi altri moduli che possono essere sovrapposte da esso sono impostate per Visibility.Collapsed?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top