UWP Template10 Frame.Navigate with parameter cause Error

时间:2016-05-23 19:19:18

标签: c# uwp-xaml template10

使用Intense Templates(SplitView示例)开发UWP项目,然后切换到Template10(Hamburger)。当我尝试传递参数

时似乎有错误

param is string with value something like this - (d5d05a3b-546a-4ca6-a345-74e333fa00fb) Frame.Navigate(typeof(EditPage),param);

错误是这样的: ErrorPicture 然后,如果我的编辑页面无法正确 param ,它将向用户发回(Frame.GoBack()),现在我收到错误

An exception of type 'System.Runtime.InteropServices.COMException' occurred in App6.exe but was not handled in user code
Additional information: Error HRESULT E_FAIL has been returned from a call to a COM component.

1 个答案:

答案 0 :(得分:1)

问题的根本原因,如果我猜测(并且基于异常字符串)是您将页面传递给无法序列化的复杂类型。模板10想要序列化您的参数的原因是它可以在您的应用暂停后正确恢复导航状态。如果你必须传递一个不可序列化的对象,我会发现这很不方便,所以你会发现BootStrapper.SessionState(一个字典)允许你保存任何类型的对象,要求你只将密钥传递给可以使用SessionState +的页面用于检索对象的密钥。

顺便提一下,这是一个很好的模式,当然也不是模板10独有的模式。我唯一想补充的就是你假设字典中缺少对象并包含防御代码来处理这种情况太。原因是,如果您的应用已被暂停,则可能会出现这种情况。

我希望这是有道理的。而且,不要感觉不好。你当然不是第一个提出这个问题的人。

var key = nameof(MyObject);
SessionState.Add(key, MyObject);
NavigationService.Navigate(typeof(Views.MainPage), key);