我正在开发一个使用Microsoft Band的UWP模板10(汉堡)应用程序,我认为我已经完成了很多,因为我将所有服务都绑定到Band(通过类库项目)和值在屏幕上完美更新。 然后我开始测试应用程序简历并遇到了问题。 当我重新启动应用程序时,用户将被带回值页面,但值不再更新。 基本上与乐队的联系似乎仍然有效,但是阅读变化的空隙不再有效。
所以我在MainPageViewModel OnNavigatedFromAsync方法中添加了代码来停止所有服务没问题。 但后来我发现恢复OnNavigatedToAsync方法时没有被解雇,所以我无法解决如何重新启动所有服务。
我还尝试在app.xaml.cs中添加OnResuming和OnSuspendingAsync的覆盖,但后来无法解决如何从那里调用MainPageViewModel中的方法。 有没有一种正确的方法来使用Template10处理这样的事情?
答案 0 :(得分:1)
我假设您在Visual Studio中使用Simulation Dashboard控件来暂停然后恢复您的应用。那么,不要使用恢复按钮。它没有按预期工作。要测试应用程序的恢复,请使用暂停按钮,然后从Band的界面打开它(而不是使用恢复按钮)。然后OnNavigatedToAsync方法应该可以正常启动。
<强>更新强>: 根据这个答案之后的讨论,我提供了以下几行的最新答案。
在App
类中设置静态viewmodel属性,如下所示:
public static TypeOfMyViewModel MyViewModel;
然后,在TypeOfMyViewModel
构造函数中,添加以下行以设置属性的值:
public TypeOfMyViewModel()
{
App.MyViewModel = this;
}
最后,在OnResuming
方法中,只需从ViewModel中调用一个方法,该方法将恢复您的服务,如下所示:
public override void OnResuming(object s, object e, AppExecutionState previousExecutionState)
{
MyViewModel.ResumeServices();
}
答案 1 :(得分:1)
当您通过Windows平台或Visual Studio暂停和恢复应用程序时,Resume操作非常快,因为它只是一个内存交换。在这种情况下,您的申请通常不知道您的申请被暂停。此操作的一个示例可能是您的用户接到电话,然后返回到您的应用。使用模板10,您的视图模型INav方法肯定不会被调用,因为您的应用程序的状态没有改变。如果您必须知道它已被暂停并且正在恢复,那么您可以在应用程序的Application / Bootstrapper中使用OnResuming覆盖。根据您需要完成的任务,您可能需要通过全局静态事件公开此操作,以便您的视图模型可以以某种方式处理它。
在使用调试位置的Visual Studio中,您可以Suspend and Shutdown
同时暂停您的应用,但会从PreviousExecutionState = Running to Terminated更改它的恢复状态。在这种情况下,您的应用程序当然不会仍在内存中,当然也不会处于相同的状态。它正在重新启动,模板10在此过渡期间启动,以恢复导航状态,设置和其他所有内容。它还会调用您的视图模型的INav覆盖,例如NavTo和NavFrom。
但要注意。在此操作期间也将调用Bootstrapper的OnResuming。幸运的是,之前的状态被传递给了这个覆盖,你可以在你的调用代码中无缝地处理这个独特的情况。
有意义吗?
祝你好运。