小编bmg*_*ith的帖子

Prism for Xamarin 表单在 BindingContext 设置后调用初始化

我希望在这里扩展这篇文章/sf/answers/4225135911/

我不完全理解使用 Prism 时视图和视图模型初始化期间发生的事件顺序。丹解释得很好,但我仍然遗漏了一些东西。

我的场景很简单,我在导航参数中传递一个 ID,视图模型将使用该 ID 从服务中查找一些数据,这一切都在 Initialize 方法中完成。但是,问题是视图属性在调用 Initialize 方法之前被触发,这意味着我还没有要显示的数据,这给我带来了一些额外的工作。

丹对事件的顺序提供了很好的解释

  1. 视图已创建(视图构造函数中的任何内容都将被执行)
  2. 如果您专门附加了 ViewModelLocator.AutowireViewModel 属性,这会将 ViewModel 解析为构造函数的一部分
  3. 如果您没有明确选择退出 ViewModelLocator 的 Autowire,导航服务将为您设置它(在 ctor 完成后)
  4. 然后,NavigationService 将调用 IAutoInitialize/IInitialize/InitializeAsync(对于 Prism 7.2+...旧版本 Prism 中的 INavigatingAware.OnNavigatingTo)
  5. 然后,导航服务会将页面推送到导航堆栈上(请注意,这可能对用户可见,也可能不可见,因为在深度链接时可能必须首先添加其他页面)
  6. 然后,NavigationService 将调用 OnNavigedFrom / OnNavigedTo (这是人们经常报告由于绑定更新而看到明显延迟的地方。

这是我需要帮助的地方

我假设步骤 3 中 Dan 说的“导航服务将为您设置”意味着此时已设置视图的 BindingContext?那么,BindingContext 是在 ctor 之后但在 Initialize 方法之前设置的吗?这意味着在 Initialize 方法中设置的所有属性将始终触发两次,一次是在设置绑定时触发,另一次是通过 Initialize 或 Autoinitialize 设置属性?

就我而言,这并不理想,因为所有属性都必须在 Initialize 方法中引发,并且我必须处理所有 null 情况。

我真的不想通过选择退出自动连接来手动完成这一切,但我没有看到任何其他选项,我是否遗漏了一些东西?有人知道是否可以修改 Prism 以将 BindingContext 的设置延迟到调用 Initialize 方法之后?

谢谢。

prism xamarin xamarin.forms

1
推荐指数
1
解决办法
1572
查看次数

标签 统计

prism ×1

xamarin ×1

xamarin.forms ×1