xamarin.forms - Prism Forms INavigatedAware 和 INavigatingAware 之间的区别?

标签 xamarin.forms navigation prism

我在 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/

相关文章:

Xamarin Forms ListView 行高不正确

jquery - 在移动设备上滚动时更平滑地将元素锁定到屏幕顶部

wpf - 为什么两个模型不应该互相交谈

c# - 如何在 Visual Studio 2012 中为新项目添加文件夹

xamarin - 在 Android 上,应用程序在方向更改时跳回默认页面

Xamarin.Forms Shell - 除非在 <Tab> 内,否则无法使用 ShellContent?

javascript - 单击后通过 JavaScript 动态创建 jQuery Mobile 页面

html - 使用CSS格式化下拉菜单

wpf - DelegateCommand 与 RoutedCommand 和手势 - WPF

azure-mobile-services - VS 2015 "Add Connected Service"-> "Mobile Services"- 配置按钮已禁用