2009-05-29 3 views
0

мне нужно создавать новый взгляд на командупризма SilverLight инстанцирует новый вид

Представьте меня есть кнопка «нового сотрудника» в модуле и при нажатии на нее, я хочу, чтобы создать новый вид сотрудника, вы нажимаете его 3 раза, и я хочу иметь вкладку с тремя элементами в ней, и каждая закладка содержит данные для сотрудника, затем вы можете сохранять и/или закрывать каждую вкладку отдельно.

Как это сделать с помощью призмы?

ответ

2

ViewInjectionComposition QuickStart имеет отличный пример того, что вы ищете.

Что вы делаете, это делегировать команду контроллеру, вывести область с областью из диспетчера региона. После того, как у вас есть область области действия, разрешите новое представление и добавьте его в регион.

Вот фрагмент быстрого запуска, который вы можете легко изменить, чтобы делать то, что вы ищете.

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