Prism 6 RequestNavigate 和 ThreadPrincipal 异常

Prism 6 RequestNavigate and ThreadPrincipal exception

使用棱镜 6

无论何时授予用户查看特定视图的验证都是使用 ThreadPrincipal 完成的。当在 viewModel 中创建视图时,此方法有效:

try{
    View someView = new View ();
    mainRegion.Add(someView , "viewName");
    mainRegion.Activate(someView );
 }
 catch (SecurityException)
 {

 }

并且视图有:

    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]

然而,在 viewModel 中创建视图并不是一个好的做法,因此如果使用 RequestNavigate 在视图之间导航:

_regionManager.RequestNavigate(RegionNames.ContentRegion, new Uri(viewName, UriKind.Relative));

同样的尝试,catch wrapper 被包裹起来:

try{
_regionManager.RequestNavigate(RegionNames.ContentRegion, new Uri(viewName, UriKind.Relative));
}
catch (SecurityException)
{

}

没有捕获异常。

问题: 如何捕获异常?

首先,不要在 ViewModel 中创建视图。这是一个很大的 MVVM "No-no"。使用 RequestNavigate 时,有一个回调,您可以将其与有关导航操作的信息一起使用。它会告诉您导航操作是否失败以及失败时的错误消息。

查看此示例:https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/18-NavigationCallback