WPF Получение RegionName из класса представления

Приложение WPF, использующее Prism.

Я использую многофазный инициализатор модуля, и при инициализации модуля я хотел бы, чтобы модуль самостоятельно проверял виды и регистрировал любые области, определенные внутри.

Я использую что-то похожее на код ниже для самостоятельной проверки классов модели представления и регистрации других вещей, но я не знаю, как отразить в представлении.

protected void SelfInspectRegions()
{
    var assm = Assembly.GetAssembly(this.GetType()).GetTypes();
    foreach (var type in assm)
    {
        if(type.IsSubclassOf(typeof(UserControl)))
        {
            var a = type;
        }
    }
}

Пример области на основе вкладок (определенной в View/UserControl), которую я хотел бы самостоятельно зарегистрировать, приведен ниже;

                <controls:ChTabControlModelAware x:Name="OrderProcessingDocumentDetailRegion"  
                                                           cal:RegionManager.RegionManager="{Binding RegionManager, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type shells:FormShell}}}"
                                                           cal:RegionManager.RegionName="Order Processing:DocumentDetailRegion"
                                                           cal:RegionManager.RegionContext="{Binding DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
                                                           Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="1" VerticalAlignment="Stretch"
                                                           HorizontalAlignment="Stretch">

                    <bindings:EventToCommandBehavior.EventBindings>
                        <bindings:EventBinding Command="{Binding SelectedDetailTabChangedCommand}"
                                  CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=controls:TabControl}, Path= SelectedItem.DataContext.HeaderInfo}"
                                  EventName="SelectionChanged" RaiseOnHandledEvents="True"
                                  PassEventArgsToCommand="True" />
                    </bindings:EventToCommandBehavior.EventBindings>
                </controls:ChTabControlModelAware>

В принципе, я хотел бы извлечь RegionName, определенное в строке;

cal:RegionManager.RegionName="Order Processing:DocumentDetailRegion"

Я не уверен, как это сделать, и любая помощь будет с благодарностью получена.

Большое спасибо

копье

Обновление 17/10/2018: чего я пытаюсь добиться.

Я пишу платформу приложений WPF с около 30 модулями (и расширяющимися), которые подписываются и внедряют сервисы.

Все мои регионы объявлены в представлении, и их очень много. В связи с развитием требований в моей структуре теперь необходимо, чтобы модули предварительно регистрировали свои регионы на этапе инициализации модуля. Одна из причин заключается в том, что некоторые службы ориентированы на конкретные регионы и имеют рабочие параметры, которые являются уникальными для каждого отдельного хоста. В настоящее время хост-модули отвечают за настройки, а это означает, что между модулями и проектами приходится много вырезать и вставлять, если вносятся изменения в рабочие настройки службы. Благодаря предварительной регистрации хостов, при инициализации модуля сервисный модуль знает, какие модули используют его сервисы, и может внедрить класс настроек в viewModel настроек хост-модулей для взаимодействия с пользователем. Изменения в рабочих настройках должны быть изменены только в сервисном модуле, а не во всех различных хост-модулях, которые его используют.

Я искал простой способ вырезать имена из многочисленных сборок модулей без необходимости явно объявлять их или украшать модель представления декларативным атрибутом.

1 ответ

Я полагаю, что самый простой способ получить действительные названия регионов - это перехватить их, когда регистрация для регионального менеджера завершена.

Вы должны зарегистрировать свою собственную реализацию IRegionManager это перенаправляет все в реальную вещь, но передает все имена регионов, проходящие через нее во время регистрации, в ваш реестр имен регионов.

Другие вопросы по тегам