2009-05-29 7 views
0

je dois instancier une nouvelle vue sur une commandeprisme SilverLight instancier une nouvelle vue

Imaginez que j'ai un bouton « nouveau employé » dans un module et lorsque vous appuyez sur, je veux créer une nouvelle vue des employés, vous appuyez trois fois dessus et je veux avoir un onglet avec trois éléments et chaque page à onglet contient des données pour un employé, alors vous pouvez enregistrer et/ou fermer chaque page à onglets séparément.

Comment est-ce que je fais cela avec Prism?

Répondre

2

Le ViewInjectionComposition QuickStart est un excellent exemple de ce que vous recherchez.

Ce que vous faites est de déléguer une commande à un contrôleur, obtenez votre région étendue hors du gestionnaire de région. Une fois que vous avez la zone délimitée, résolvez une nouvelle vue et ajoutez-la à la région.

Voici un extrait du quickstart que vous pouvez facilement modifier pour faire ce que vous cherchez.

public class EmployeesController : IEmployeesController 
{ 
    private IUnityContainer container; 
    private IRegionManager regionManager; 

    public EmployeesController(IUnityContainer container, IRegionManager regionManager) 
    { 
     this.container = container; 
     this.regionManager = regionManager; 
    } 

    public virtual void OnEmployeeSelected(BusinessEntities.Employee employee) 
    { 
     IRegion detailsRegion = regionManager.Regions[RegionNames.DetailsRegion]; 
     object existingView = detailsRegion.GetView(employee.EmployeeId.ToString(CultureInfo.InvariantCulture)); 

     if (existingView == null) 
     { 
      IProjectsListPresenter projectsListPresenter = this.container.Resolve<IProjectsListPresenter>(); 
      projectsListPresenter.SetProjects(employee.EmployeeId); 

      IEmployeesDetailsPresenter detailsPresenter = this.container.Resolve<IEmployeesDetailsPresenter>(); 
      detailsPresenter.SetSelectedEmployee(employee); 

      IRegionManager detailsRegionManager = detailsRegion.Add(detailsPresenter.View, employee.EmployeeId.ToString(CultureInfo.InvariantCulture), true); 
      IRegion region = detailsRegionManager.Regions[RegionNames.TabRegion]; 
      region.Add(projectsListPresenter.View, "CurrentProjectsView"); 
      detailsRegion.Activate(detailsPresenter.View); 
     } 
     else 
     { 
      detailsRegion.Activate(existingView); 
     } 
    } 
} 
Questions connexes