0

コマンドで新しいビューをインスタンス化する必要があります

モジュールに「新しい従業員」ボタンがあり、それを押すと新しい従業員ビューを作成し、それを 3 回押すと、3 つの要素を持つタブが必要で、各タブ ページにデータが含まれているとします。従業員の場合、各タブ ページを個別に保存および/または閉じることができます。

Prismでこれを行うにはどうすればよいですか?

4

1 に答える 1

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);
        }
    }
}
于 2009-06-02T20:57:57.550 に答える