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
это перенаправляет все в реальную вещь, но передает все имена регионов, проходящие через нее во время регистрации, в ваш реестр имен регионов.