Prism 6 RequestNavigate和ThreadPrincipal异常

时间:2017-05-16 13:56:03

标签: c# wpf thread-safety prism principal

使用Prism 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));

同样的尝试,抓住包裹物缠绕着:

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

}

没有抓住异常。

问题:  如何捕获异常?

1 个答案:

答案 0 :(得分:0)

首先,不要在ViewModel中创建视图。这是一个伟大的MVVM“禁忌”。使用RequestNavigate时,您可以使用回调来获取有关导航操作的信息。它会告诉您导航操作失败以及失败时的错误消息。

请参阅此示例:https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/18-NavigationCallback