棱镜silverlight实例化一种新观点

时间:2009-05-29 00:56:08

标签: silverlight prism

我需要在命令

上实例化一个新视图

想象一下,我在模块中有一个“新员工”按钮,当你按下它时,我想创建一个新的员工视图,你按3次,我想要一个包含三个元素的标签和每个标签页面包含员工的数据,然后您可以单独保存和/或关闭每个标签页。

我如何用Prism做到这一点?

1 个答案:

答案 0 :(得分: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);
        }
    }
}