在Prism中,我应该在哪里使用`RegisterViewWithRegion`?

3
我正在创建“布局”视图,其中包括几个“ContentControl”元素,这导致我需要注册一个“默认”控件以在启动时显示。当我意识到“RegisterViewWithRegion”可以解决此问题时,我不确定应该在哪里使用它?
目前,我一直在布局的ViewModel构造函数中使用“RegisterViewWithRegion”,但这会导致第二次构造ViewModel(第二次)时出现“ArgumentException:给定名称的区域已注册:AuthContentRegion”的错误。
视图:
<DockPanel LastChildFill="True">
    <ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.NavRegion}" DockPanel.Dock="Top" Margin="5" />
    <ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.AuthContentRegion}"  Margin="5" />
</DockPanel>

视图模型:

public AdminViewModel(IRegionManager regionManager)
{
    regionManager.RegisterViewWithRegion(RegionNames.NavRegion, typeof(Views.AdminNavView));
    regionManager.RegisterViewWithRegion(RegionNames.AuthContentRegion, typeof(Views.RailwayListView));
}

基本上,我想要的是将默认的UserControl注册为ContentControl/Region,并且在重新构造View/ViewModel时不会出现任何异常。
1个回答

1

IRegionMemberLifetime 实现并将 KeepAlive 设置为 false 似乎已经解决了异常问题。

另外,我意识到可以通过在 Loaded 事件中调用 RequestNavigate 方法来替换 RegisterViewWithRegion

视图:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

<Grid>
    <DockPanel LastChildFill="True">
        <views:AdminNavView DockPanel.Dock="Top" Margin="5" />
        <ContentControl prism:RegionManager.RegionName="{x:Static core:RegionNames.AuthContentRegion}"  Margin="5" />
    </DockPanel>
</Grid>

视图模型:

public class AdminViewModel : BindableBase, IRegionMemberLifetime
{
    private readonly IRegionManager _regionManager;

    public AdminViewModel(IRegionManager regionManager)
    {
        _regionManager = regionManager;
        OnLoadedCommand = new DelegateCommand(OnLoaded);
    }

    public bool KeepAlive => false;
    public ICommand OnLoadedCommand { get; }

    public void OnLoaded()
    {
        _regionManager.RequestNavigate(RegionNames.AuthContentRegion, NavigationPaths.RailwayListPath);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接