0

我不断收到以下错误,我不明白为什么。它发生在暂停时,但仅在访问页面两次之后。也就是说,应用程序加载完毕,我进入页面,然后使用VS2013暂停应用程序,它可以正常工作。但是,如果我改为打开应用程序,转到该页面,然后返回并再次转到该页面,然后暂停...我收到错误消息。我没有将任何复杂类型传递给 frame.Navigate,甚至没有传递任何原始类型。我已更改我的应用程序以确保它甚至不再使用导航参数,以解决此问题。同时,由于我通过 Prism 使用 MVVM,所以我从不直接调用 frame.Navigate。我相信 SessionStateService 会调用它,但我无法通过那里进行调试以弄清楚发生了什么。

错误:“GetNavigationState 不支持传递给 Frame.Navigate 的参数类型的序列化。”

我正在做的唯一奇怪的事情是我在我的页面上嵌入了一个 UserControl,并且我的页面视图模型中有它的视图模型。但是,嵌入式控件的视图模型不是 Prism.StoreApps.Viewmodel,它只是实现 INotifyPropertyChanged。这是因为我在 2 个页面中使用此用户控件,而不是它自己的页面。这是造成问题的原因吗?用户控件的 viewmodel 是每个页面的 viewmodel 类上的一个属性,该属性被标记为 [RestorableState],该用户控件的 viewmodel 中的属性也是如此。如果您认为这可能是导致它的原因,请告诉我为棱镜嵌入用户控制 MVVM 样式的正确方法。

请注意,我还为 OnRegisterKnownTypesForSerialization 设置了一个覆盖,并为我的用户控件的视图模型调用了 SessionStateService.RegisterKnownType。

4

1 回答 1

1

我能够将 MS 示例代码中的 Microsoft.Practices.Prism.StoreApps 项目添加到我的解决方案中,而不是从 NuGet 引用 dll。这让我可以调试。尽我所能告诉问题是框架的 BackStack 包含一个过去的导航记录和一个复杂的对象。在这种情况下,它原来是一个 RoutedEventArgs 对象,默认情况下它存在,因为我使用的是 Core.NavigateToPageAction 事件触发行为而没有指定参数。显然,如果您不指定参数,它会传递一个带有单击按钮的 RoutedEventArgs 对象。一旦我将参数设置为“哇”,它就停止了错误。

蹩脚的部分是这是在后退按钮上,所以没有预期的参数:(无论如何,这解决了我的问题。

于 2015-05-04T03:14:56.087 回答