2009-05-29 61 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); 
     } 
    } 
}