我在 Xamarin Forms 应用程序中使用 Prism Forms 7.x。到目前为止,我一直在 View 模型中使用 INavigatedAware 界面来检查是否发生了往返于相应 View 模型的导航。现在,我看到有 INavigatingAware,它只提供了 OnNavigatingTo 方法(所以,导航还没有完成)。
我关于 INavigatingAware.OnNavigatingTo 的问题: - 我可以在对 OnNavigatedFrom 调用不感兴趣的地方使用 INavigatingAware 吗? - 在 OnNavigatingTo 中加载数据(在设置 BindingContext 之前;这样例如数据绑定(bind)不需要更新两次)在性能方面是否更好?
很高兴分享您关于这两个界面的经验和最佳实践。
最佳答案
INavigatingAware.OnNavigatingTo 首次引入 Prism 以帮助开发人员执行类似于 ViewWillAppear
的初始化逻辑。
为了帮助更好地形象化这一点,NavigationService 中的事件看起来像这样:
- 创建页面
- 如果 ViewModelLocator.Autowire 属性为 null,则设置它
- 应用来自 PageBehaviorFactory 的任何行为
- 在我们导航离开的 Page/ViewModel 上调用 IConfirmNavigation.CanNavigate(它是异步对应项)
- 调用 INavigatingAware.OnNavigatingTo
- 将页面推送到 NavigationStack 上
- 调用 INavigatedAware.OnNavigated{From|To}
重大变化
现在,综上所述,我们已经收到了大量关于 INavigatingAware 的反馈(这个问题的本质),由于来自 Prism 社区的大量反馈,INavigatingAware 在 Prism 7.2 中已经过时了。这意味着它已从 INavigationAware 中删除,如果直接实现它会抛出编译时错误。对于您从 INavigationAware 免费获得它的那些时间,它根本不会被调用。展望 future ,我们引入了一系列界面,使这更容易,并且更能 self 记录意图。
新接口(interface)和 API
- 初始化.初始化
- IInitializeAsync.InitializeAsync
新的 IInitialize 接口(interface)是 INavigatingAware 的直接替代品。我们很早就收到反馈,人们希望能够在初始化期间执行异步任务。这里的问题是,这可能会导致导航中出现非常明显的延迟,类似于 IConfirmNavigationAsync。如果您使用这些异步界面中的任何一个,您将需要确保在屏幕上包含某种忙碌/加载覆盖。
关于xamarin.forms - Prism Forms INavigatedAware 和 INavigatingAware 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56581785/