2010-02-26 16 views
0

J'ai deux modules, l'un est un module d'en-tête, l'autre est un module d'articles.En utilisant PRISM, comment afficher la vue d'un autre module et accéder à ses propriétés pour mettre à jour son état?

J'ai une vue HeaderDetails, qui contient une région appelée 'ItemsSummaryRegion'. Cette région est enregistrée pour remplir la région avec la vue ItemListView du module Items.

regionManager.RegisterViewWithRegion("ItemsSummaryRegion", typeof(IItemListView)); 

La question est, comment puis-je avoir accès à ce point de vue généré automatiquement afin que je puisse mettre la liste des éléments qu'il est censé afficher? Je veux définir cela dans le ViewModel de la vue HeaderDetails.

Est-ce que quelqu'un sait comment vous faites cela? Ou peut suggérer une meilleure façon d'afficher ces données?

Merci.

Répondre

2

Si vos deux modules sont si étroitement couplés, ne serait-il pas plus logique d'avoir un seul module contenant les deux vues, et de les configurer avec master/detail.

Cet exemple montre quelque chose de semblable à ce que vous essayez d'atteindre: http://www.tanguay.info/web/index.php?pg=codeExamples&id=105

+0

C'était aussi ma première impression. Ils sont un module logique. –

0

Vous devez utiliser unityContainer pour créer des éléments, puis appeler Add et Activate.

public TaskList(IEventAggregator eventAggregator, 
        IRegionManager regionManager, 
        IUnityContainer container) 
    { 
     _EventAggregator = eventAggregator; 
     _RegionManager = regionManager; 
     _Container = container; 
    } 


     IItemListVM vm = _Container.Resolve<IItemListVM>(); 
     IItemListView view = new IItemListView(vm); 

     _RegionManager.Regions["ItemsSummaryRegion"].Add(view); 
     _RegionManager.Regions["ItemsSummaryRegion"].Activate(view); 

Cela vous permet d'appeler IRegion.Remove plus tard, quand vous voulez effacer la région. Si vous voulez juste d'enregistrer une région en vue, vous pouvez le faire aussi, il suffit de remplacer les dernières lignes d'un couple de ma logique avec l'autre appel à RegisterViewWithRegion:

_RegionManager.RegisterViewWithRegion("ItemsSummaryRegion", 
    (x) => 
    { 
      _Container.Resolve<IItemListView>(); 
    }); 
+0

Merci - J'ai essayé cette solution d'abord, mais il a lancé une exception en essayant de le faire dans le constructeur de la ViewModel parce que la région n'était pas encore enregistré, comment puis-je contourner cela? – James

+0

Vous ne pourrez pas appeler la logique de registre à l'intérieur du constructeur de la machine virtuelle. Vous devez créer une vue avant de pouvoir placer une autre vue à l'intérieur de celle-ci. Faites attention à la vue que vous essayez d'afficher et à l'endroit où vous essayez de la montrer. – thepaulpage