我在Xamarin Forms应用程序中使用Prism Forms 7.x。 到目前为止,我一直在视图模型中使用 INavigatedAware 界面来检查是否发生了往返相应视图模型的导航。现在,我看到有INavigatingAware,它只提供OnNavigatingTo方法(所以,导航还没有完成)。
我关于 INavigatingAware.OnNavigatingTo 的问题: - 我可以在对OnNavigatedFrom调用不感兴趣的地方使用INavigatingAware吗? - 在 OnNavigatingTo 中加载数据(在设置 BindingContext 之前;这样数据绑定不需要更新两次)在性能方面是否更好?
很高兴分享您有关这两个界面的经验和最佳实践。
INavigatingAware.OnNavigatingTo 最初被引入 Prism 以帮助开发人员执行类似于ViewWillAppear
的初始化逻辑。
为了帮助更好地可视化这一点,事件在导航服务中如下所示:
- 创建页面
- 设置 ViewModelLocator.Autowire 属性(如果为空)
- 应用来自 PageBehaviorFactory 的任何行为
- 调用 IConfirmNavigation.CanNaving(它是异步对应项)在我们正在导航的页面/视图模型上
- 调用 INavigatingAware.OnNavigatingTo
- 将页面推送到导航堆栈上
- Call INavigatedAware.OnNavigated{From|到}
重大变更
现在,综上所述,我们已经收到了关于INavigatingAware(这个问题的本质)的大量反馈,因此来自Prism社区的压倒性反馈INavigatingAware在Prism 7.2中已经过时了。这意味着它已从 INavigationAaware 中删除,如果您直接实现它,将引发编译时错误。对于那些你从INavigationAware免费获得它的时候,它根本不会被调用。展望未来,我们引入了一系列接口,使意图更容易、更自我记录。
新接口和 API
- IInitialize.Initialize
- IInitializeAsync.InitializeAsync
新的IInitialize接口是INavigatingAware的直接替代品。我们早就得到反馈,人们希望能够在初始化期间执行异步任务。这里的问题是,这可能会导致导航中出现非常明显的延迟,类似于 IConfirmNavigationAsync。如果您使用这些异步接口中的任何一个,则需要确保在屏幕上包含某种繁忙/加载叠加层。