我有一个使用 Prism 6 的 WPF 项目。
我有一个使用区域的视图(标题搜索视图(:
<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>
我有一个菜单项,我想打开"标题搜索视图",我从导航中使用:
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)
{
}
现在,当我第一次单击菜单项时,这没关系 但是在那之后,如果单击菜单项发生 应用程序处于中断模式:
我想这种情况发生在这个异常中:
"已注册具有给定名称的区域">
我在"标题模块"中注册了这个区域:
_regionManager.RegisterViewWithRegion(RegionNames.TitleTreeRegion, typeof(TitleTreeView));
如何解决此问题?
我解决了我的问题。
有例外"具有给定名称的区域已注册"。
当我们导航到包含"区域"的"视图"时,该区域将添加到"导航服务"中的"区域集合"中,如果多次将该区域添加到区域集合,则会发生异常。
所以我们应该:
public void OnNavigatedFrom(NavigationContext navigationContext)
{
navigationContext.NavigationService.Region.RegionManager.Regions.Remove(RegionNames.TitleTreeRegion);
}