gpt4 book ai didi

c# - MvvmCross 5 导航服务中的 fragment 初始化顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:10 24 4
gpt4 key购买 nike

我对 MvvmCross 5 中引入的导航服务有疑问。

在版本 4 中:

  • 我用 ShowViewModel<ViewModel>() 导航到 fragment
  • 然后 Init ViewModel 的方法被称为
  • 之后是OnCreateView fragment 的方法被称为
  • 在那里我可以根据 ViewModel 数据操作 View (例如向 View 添加特定元素)。

在版本 5 中:

  • 我用 await NavigationService.Navigate<ViewModel>() 导航
  • OnCreateView fragment 的首先被调用
  • 之后是Initialize来自 ViewModel 的方法。
  • 这在创建 Fragment View 时没有 ViewModel 数据结束。

这是异步导航的错误还是功能?如果需要,是否有更好的方法来操作基于 ViewModel 数据的 Fragment View ?

最佳答案

Is this a bug or a feature of async navigation?

这是设计使然,但自 (v5.0.4) 以来已进行了修订,请参阅下面的流程更改。

If that is so wanted, is there a better way to manipulate the Fragment view based on ViewModel data?

使用 v5.0.4+ 应该会产生您期望的行为。在 ViewModelInitialize() 上等待导航服务在开始 View 生命周期事件之前完成。


MvvmCross v5.0.0 - v5.0.3

您看到的行为出现在 MvvmCross 5.0.0-5.0.3 中。流程如下:

  • ViewModel.Ctor
  • (选定的导航调用) Init(参数) (已弃用,使用反射,而是使用类型安全的 Initialize)
  • (选定的导航调用) ViewModel.ReloadState(savedState)
  • (选定的导航调用) ViewModel.Start()
  • BeforeNavigate (NavigationService 事件)
  • *ViewDispatcher.ShowViewModel() (触发器 View 生命周期)
  • *ViewModel.Initialize()
  • AfterNavigate (NavigationService 事件)
  • BeforeClose (NavigationService 事件)
  • ViewDispatcher.ChangePresentation()
  • AfterClose (NavigationService 事件)

MvvmCross v5.0.4+

v5.0.4+ 改进了流程并更改了导航顺序:

  • ViewModel.Ctor
  • BeforeNavigate (NavigationService 事件)
  • *ViewModel.Initialize()
  • Init(parameter) (已弃用,使用反射,而是使用类型安全的 Initialize)
  • ViewModel.ReloadState(savedState)
  • ViewModel.Start()
  • *ViewDispatcher.ShowViewModel() (触发器 View 生命周期)
  • AfterNavigate (NavigationService 事件)
  • BeforeClose (NavigationService 事件)
  • ViewDispatcher.ChangePresentation()
  • AfterClose (NavigationService 事件)

附加信息

您可以查看围绕导航顺序记录的 GitHub 问题 (#1968)。此外,您可以查看拉取请求 ( #1971 ),它更新了版本 5.0.4 的 Initialize 顺序。

关于c# - MvvmCross 5 导航服务中的 fragment 初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com