RegionManager не содержит регионов, которые я настраиваю - PullRequest
2 голосов
/ 29 ноября 2011

Я использую Prism, MEF (MEF Bootstrapper) и WPF. Я новичок в этом, и у меня есть очень простое приложение, которое я пытаюсь заставить работать.

У меня есть два региона в главном окне (оболочка), которые работают нормально. Я вижу их в окне во время выполнения и могу получить к ним доступ через TheRegionManager.Regions ["regionName"] из кода внутри окна оболочки и в других окнах. Для этого я использую: [Импортировать] public IRegionManager TheRegionManager {private get; установить;}

Теперь я хочу сделать то же самое для другого окна в приложении. У меня есть две области в нем, и я настраиваю их из XAML, и я делаю:

        TheRegionManager.RegisterViewWithRegion("AdsMainRegion", typeof(Ads));
        TheRegionManager.RegisterViewWithRegion("AdDetailsRegion", typeof(AdsDetail));

Чтобы зарегистрировать представления как в других 2 регионах от Shell. Это работает, потому что я могу видеть представления, загруженные в регионах во время выполнения. Проблема в том, что я не могу получить доступ к регионам из кода: Импортированный TheRegionManager равен нулю, мне нужно сделать

         TheRegionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); wich returns a region manager that contain only the 2 regions from the Shell window but not the 2 regions from this other window that I want.

        I'm sure that I'm missing something. Maybe I need to add some code to the bootstrapper. Or I should add this other window as a module in the catalog? Why does it work fine in Shell window and not in this other window?

1 Ответ

0 голосов
/ 10 февраля 2015

Перейдите в код позади вашего окна и:

    protected override void OnInitialized(System.EventArgs e)
    {
        base.OnInitialized(e);

        var regionManager = ServiceLocator.Current.GetService(typeof(IRegionManager)) as IRegionManager;
        RegionManager.SetRegionManager(/*content control for region manager*/, regionManager);
    }

теперь в режиме просмотра:

TheRegionManager.RegisterViewWithRegion(/*region name*/, typeof(/*view type*/));
...