WPF Получение RegionName из класса представления - PullRequest
0 голосов
/ 16 октября 2018

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"

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

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

Ланс

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

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

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

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

1 Ответ

0 голосов
/ 17 октября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...