导航到视图但发生了具有给定名称的异常区域,已经注册

时间:2018-06-22 10:00:56

标签: c# wpf prism

我有一个与Prism 6有关的WPF项目。

我有一个使用区域的视图(TitleSearchView):

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>
    <ContentControl prism:RegionManager.RegionName="TitleTreeRegion"/>
    <Button Content="View" Grid.Row="1" HorizontalAlignment="Center" Margin="5" MinWidth="80" Command="{Binding TitleViewCommand}"/>
</Grid>

我有一个菜单项,我想打开“ TitleSearchView”,这是我在导航中使用的:

    var parameters = new NavigationParameters { { "viewMode", viewMode } };
    _regionManager.RequestNavigate(RegionsName.ContentRegion, ViewsName.TitleSearchView, parameters);

“ TitleSearchViewModel”实现“ INavigationAware”:

    public void OnNavigatedTo(NavigationContext navigationContext)
    {
        ViewMode = (ViewModeEnum)navigationContext.Parameters["viewMode"];
    }

    public bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return false;
    }

    public void OnNavigatedFrom(NavigationContext navigationContext)
    {

    }

现在,当我第一次单击菜单项时,这是可以的,但是之后,如果单击菜单项,则应用程序处于中断模式:

我想这种例外情况会发生:

“具有指定名称的区域已经注册”

我在“ TitleModule”中注册该区域:

_regionManager.RegisterViewWithRegion(RegionNames.TitleTreeRegion, typeof(TitleTreeView));

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。

有一个例外情况“具有给定名称的区域已被注册”。

当我们导航到包含“区域”的“视图”时,该区域将添加到“ NavigationService”中的“ RegionCollection”,如果再将区域添加到RegionCollection,则会发生异常。

所以我们应该:

    public void OnNavigatedFrom(NavigationContext navigationContext)
    {
        navigationContext.NavigationService.Region.RegionManager.Regions.Remove(RegionNames.TitleTreeRegion);
    }