Xamarin形式的Prism设置BindingContext后调用

问题描述 投票:0回答:1

我希望在此https://stackoverflow.com/a/60359084/6558112上展开更多帖子>

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

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

Dan对事件的顺序进行了很好的解释

  1. 创建视图(执行视图ctor中的所有操作)
  2. 如果您专门附加了ViewModelLocator.AutowireViewModel属性,这将把ViewModel解析为ctor的一部分
  3. 如果您没有特别选择退出ViewModelLocator的自动装配,导航服务将为您设置它(在ctor完成之后)
  4. 然后,导航服务将调用IAutoInitialize / IInitialize / InitializeAsync(对于Prism 7.2 + ... inavigatingAware.OnNavigatingTo,在较旧的Prism中)
  5. 然后,NavigationService将页面推送到导航堆栈上(请注意,这可能对用户不可见,因为在进行深度链接时可能必须先添加其他页面)
  6. 然后NavigationService将调用OnNavigatedFrom / OnNavigatedTo(这是人们经常报告由于绑定更新而看到的可见延迟的地方。
  7. 这是我需要帮助的地方

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

在我的情况下,这不是理想的,因为所有属性都必须在Initialize方法中引发,并且我必须处理所有空情况。

我真的不想通过退出自动装配来手动完成所有操作,但是我没有看到其他选择,我是否缺少某些东西?任何人都知道是否可以修改Prism来将BindingContext的设置延迟到调用Initialize方法之后?]

谢谢。

我希望在此处继续扩展https://stackoverflow.com/a/60359084/6558112,我不完全了解在...

xamarin.forms prism
1个回答
0
投票

[Priism提供的Initialize方法:

© www.soinside.com 2019 - 2024. All rights reserved.