WinRT Prism.StoreApps:GetNavigationState 不支持传递给 Frame.Navigate 的参数类型的序列化



我不断遇到以下错误,我不明白为什么。它发生在暂停中,但仅在访问页面两次之后。也就是说,该应用程序加载了,我转到页面,然后使用VS2013暂停该应用程序,并且效果很好。但是,如果我打开应用程序,请转到页面,然后返回到页面,然后暂停...我会遇到错误。我没有将任何复杂的类型传递给框架,甚至没有任何原始类型。我更改了我的应用程序,以确保它甚至不再使用导航参数,以解决此问题。同时,由于我正在通过Prism使用MVVM,因此我从不致电框架。我相信SessionStateservice的某些东西称呼它,但我无法在那里进行调试以弄清楚发生了什么。

错误:" getNavigationState不支持传递给框架的参数类型的序列化。"

我正在做的唯一奇怪的事情是,我在页面上嵌入了usercontrol,并且在页面ViewModel中使用了ViewModel。但是,嵌入式控件的ViewModel不是Prism.storeapps.viewModel,它只是实现了InotifyPropertyChanged。这是因为我在2页中使用此用户控件,而不是它自己的页面。这会导致问题吗?用户控件的ViewModel是每个页面ViewModel类中的属性,该属性和该属性以及该用户控件的ViewModel中的属性也被标记为[RestorableState]。如果您认为这可能导致它,请让我知道嵌入用户控制MVVM样式以获取Prism的正确方法。

请注意,我还设置了一个替代,用于registernoningtypesforsialization,并称为SessionStateservice.RegisterKnowntype,用于用户控件的ViewModel。

我能够从MS示例代码添加Microsoft.prist.prism.storeapps项目到我的解决方案中,而不是从Nuget引用DLL。这使我可以调试。最好的情况下,我可以说问题是框架的背面包含带有复杂对象的过去导航记录。在这种情况下,事实证明它是一个routedeventargs对象,默认情况下是因为我使用了core.navigateTopageAction事件触发行为,没有指定参数。显然,如果您没有指定参数,它将通过单击的按钮传递一个routedeventargs对象。.一旦我将参数设置为" wow",它就会停止存在错误。

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

最新更新