【发布时间】:2020-02-15 12:13:48
【问题描述】:
我是使用 Xamarin.Forms 的 Prism 新手。我已经使用 Navigation 和 Commanding 类实现了 ViewModel 方法。它工作得很好,但只有一件事我不明白。将 AutowireViewModel 设置为 true 后,ViewModelLocator 会自动为我填充 BindingContext,这很不错。事情的顺序不是我所期望的。首先是 View 上属性的绑定,然后 OnNavigatedTo 被触发。这意味着当我收到视图上的参数时,我的属性初始化已经完成。我可以通过执行 RaisePropertyChanged 来解决这个问题。这会导致以下情况:
- 我不得不为 ViewModel 上的每个属性编写 RaisePropertyChanged,我想在视图中使用新数据查看。
- 所有绑定都会触发两次。对于快速的东西,这不是问题,但有些速度较慢。
- 视图可见后刷新数据。不会令人不安,但一次显示完成的视图及其数据会更好。
- 所有属性都必须能够处理空引用。
有没有办法在绑定开始之前初始化 ViewModel 中的数据?
【问题讨论】:
-
不使用视图模型定位器? prism 团队希望您使用导航界面,遗憾的是,他们不会提供导航到已初始化视图模型的方法。
-
在这种情况下,NavigationParameters 不合适。它会导致过多的额外代码,从而导致预期更少的复杂性。经验教训。
-
@Haukinger 请停止传播错误信息
-
@DanSiegel 需要复习吗? github.com/PrismLibrary/Prism/issues/367#issuecomment-165815286
We do not recommend passing parameters via the ctor. [...] We will not be adding this to the Prism code base. -
@Haukinger 你正在挖掘一个 5 年前的问题在这里并没有改变任何东西。 Prism 不会先做 ViewModel 导航。抱怨这一点而忽略了是否可以在将页面推送到导航堆栈之前初始化 ViewModel 从而避免昂贵的绑定更新的问题,这对人们来说是非常误导的。
标签: xamarin.forms prism