El Administrador de regiones no puede encontrar la región dentro de la ventana emergente personalizada

Tengo un ShellView que usa objetos de interactividad con PopupWindowAction de prism para mostrar mi vista de configuración personalizada. Y mi ShellViewModel contiene un objeto InteractionRequest y un comando Delegate que activará la interacción del usuario. Después de la interacción activada por el usuario, la vista de configuración personalizada (DataFeedManagerView) aparece en el centro de ShellView. En My DataFeedManagerView, hay una lista de DataFeeds (control ListBox) en el lado izquierdo y hay una vista de configuración específica de feeds de datos (ContentControl con Región establecida a través de RegionManager) en el lado derecho. Primero, registré todas las vistas con RegisterViewWithRegion. Entonces, lo que intento hacer es activar la vista de configuración de objetos relacionados dentro del control de contenido a través del método Activate de Region. Cuando trato de hacer esto, recibo un error "no se puede encontrar la región". ¿Entonces no podemos usar regiones dentro de una ventana emergente personalizada?

PS1: Tal vez este es un requisito tan simple, pero contiene muchos pasos debido a eso, mi explicación fue un poco complicada. Espero que el código sea más descriptivo.

PS2: Cumplo las expectativas con el uso de enlaces simples a la propiedad de contenido de ContentControl. Pero me preocupa cuál es mi error y / o la solución correcta para usar regiones dentro de la ventana emergente de interacción personalizada.

..::Cáscara::..

<Window x:Class="PrismUnityApp.Views.ShellView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:views="clr-namespace:PrismUnityApp.Views"
    xmlns:constants="clr-namespace:PrismUnityApp.Constants"
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Title="{Binding Title}" Height="480" Width="640">
<DockPanel LastChildFill="True">
    <i:Interaction.Triggers>
        <prism:InteractionRequestTrigger SourceObject="{Binding ConfirmationRequest}">
            <prism:PopupWindowAction IsModal="True" CenterOverAssociatedObject="True">
                <prism:PopupWindowAction.WindowContent>
                    <views:DataFeedManagerView/>
                </prism:PopupWindowAction.WindowContent>
            </prism:PopupWindowAction>
        </prism:InteractionRequestTrigger>
    </i:Interaction.Triggers>
    <Button Content=" Show Data Feed Manager" Command="{Binding ShowDataFeedManagerCommand}"/>
    <ContentControl prism:RegionManager.RegionName="{x:Static constants:WellKnownRegionNames.ContentRegion}" />
</DockPanel>

using System.Windows.Input;
using Prism.Commands;
using Prism.Interactivity.InteractionRequest;
using Prism.Mvvm;

namespace PrismUnityApp.ViewModels
{
    public class ShellViewModel : BindableBase
    {
        private string _title = "Prism Unity Application";
        public ICommand ShowDataFeedManagerCommand { get; }
        public InteractionRequest<IConfirmation> ConfirmationRequest { get; }
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }
        public ShellViewModel()
        {
            ConfirmationRequest = new InteractionRequest<IConfirmation>();
            ShowDataFeedManagerCommand = new DelegateCommand(ShowDataFeedManager);
        }
        public void ShowDataFeedManager()
        {
            ConfirmationRequest.Raise(
                new Confirmation {Title = "Data Feed Manager", Content = string.Empty},
                confirmation =>
                {
                });
        }
    }
}

.. :: DataFeedManager :: ..

<UserControl x:Class="PrismUnityApp.Views.DataFeedManagerView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:constants="clr-namespace:PrismUnityApp.Constants"
         xmlns:prism="http://prismlibrary.com/"
         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
         prism:ViewModelLocator.AutoWireViewModel="True"
         Height="240" Width="320">
<DockPanel LastChildFill="True">
    <ListBox
        SelectedItem="{Binding Current, Mode=OneWay}"
        ItemsSource="{Binding DataFeeds}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <prism:InvokeCommandAction
                    Command="{Binding SelectionChangedCommand}"
                    CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource Self}}"></prism:InvokeCommandAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Key}"></TextBlock>
            &l,t;/DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <ContentControl prism:RegionManager.RegionName="{x:Static constants:WellKnownRegionNames.DataFeedRegion}"></ContentControl>
</DockPanel>

using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Input;
using Microsoft.Practices.Unity;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using PrismUnityApp.Constants;
using PrismUnityApp.Interfaces;

namespace PrismUnityApp.ViewModels
{
    public class DataFeedManagerViewModel : BindableBase, IDataFeedManagerViewModel
    {
        private readonly IRegionManager _regionManager;
        public IDictionary<string, object> DataFeeds { get; }
        public ICommand SelectionChangedCommand { get; }
        public DataFeedManagerViewModel(IUnityContainer unityContainer, IRegionManager regionManager)
        {
            _regionManager = regionManager;

            SelectionChangedCommand = new DelegateCommand<SelectionChangedEventArgs>(SelectionChanged);

            DataFeeds = new Dictionary<string, object>
            {
                {WellKnownDataFeedNames.SimulationDataFeed, unityContainer.Resolve<ISimulationDataFeedView>()},
                {WellKnownDataFeedNames.BarchartDataFeed, unityContainer.Resolve<IBarchartDataFeedView>()}
            };

            foreach (var dataFeed in DataFeeds)
                _regionManager.RegisterViewWithRegion(WellKnownRegionNames.DataFeedRegion, () => dataFeed.Value);
        }
        public void SelectionChanged(SelectionChangedEventArgs e)
        {
            var addedItem = (KeyValuePair<string, object>) e.AddedItems[0];
            var region = _regionManager.Regions[WellKnownRegionNames.DataFeedRegion];
            region.Activate(addedItem.Value);
        }
    }
}

.. :: Bootstrapper :: ..

using System.Windows;
using Microsoft.Practices.Unity;
using Prism.Unity;
using PrismUnityApp.Interfaces;
using PrismUnityApp.ViewModels;
using PrismUnityApp.Views;

namespace PrismUnityApp
{
    class Bootstrapper : UnityBootstrapper
    {
        #region Overrides of UnityBootstrapper

        protected override void ConfigureContainer()
        {
            base.ConfigureContainer();
            Container.RegisterType<ISimulationDataFeedView, SimulationDataFeedView>();
            Container.RegisterType<ISimulationDataFeedViewModel, SimulationDataFeedViewModel>();
            Container.RegisterType<IBarchartDataFeedView, BarchartDataFeedView>();
            Container.RegisterType<IBarchartDataFeedViewModel, BarchartDataFeedViewModel>();
            Container.RegisterType<IDataFeedManagerView, DataFeedManagerView>();
            Container.RegisterType<IDataFeedManagerViewModel, DataFeedManagerViewModel>();
        }

        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<ShellView>();
        }

        protected override void InitializeShell()
        {
            Application.Current.MainWindow.Show();
        }

        #endregion
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta