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
使用棱镜 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