0

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;
        }
    }
}

下面是我想自行注册的基于选项卡的区域(在视图/用户控件上定义)的示例;

                <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"

我不知道如何做到这一点,任何帮助将不胜感激

非常感谢

2018 年 17 月 10 日更新:我想要实现的目标。

我正在编写一个 WPF 应用程序框架,其中包含大约 30 个模块(并且正在扩展),它们都订阅和注入服务。

我所有的区域都在视图中声明,并且有很多。由于我的框架中的开发要求,现在模块需要在模块初始化阶段预先注册它们的区域。原因之一是某些服务以特定区域为目标,并且每个主机都具有独特的操作设置。目前主机模块负责设置,这意味着如果对服务的操作设置进行更改,则需要在模块和项目之间进行大量剪切和粘贴。通过主机预注册,在模块初始化中,服务模块知道哪些模块使用它的服务,并且可以将设置类注入到主机模块设置视图模型中以供用户交互。

我一直在寻找一种简单的方法来从众多模块程序集中提取名称,而无需显式声明它们或使用声明性属性装饰视图模型。

4

1 回答 1

0

我想获得实际区域名称的最简单方法是在区域管理器注册完成时拦截它们。

您应该注册自己的实现IRegionManager,将所有内容转发到真实事物,但将在注册期间通过它的所有区域名称传递到您的区域名称注册表。

于 2018-10-17T11:04:16.970 回答