我有一个与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));
如何解决此问题?
答案 0 :(得分:0)
我解决了我的问题。
有一个例外情况“具有给定名称的区域已被注册”。
当我们导航到包含“区域”的“视图”时,该区域将添加到“ NavigationService”中的“ RegionCollection”,如果再将区域添加到RegionCollection,则会发生异常。
所以我们应该:
public void OnNavigatedFrom(NavigationContext navigationContext)
{
navigationContext.NavigationService.Region.RegionManager.Regions.Remove(RegionNames.TitleTreeRegion);
}