我是Xamarin.Forms的Prism新手。我已经使用Navigation和Commanding类实现了ViewModel方法。它工作正常,但只有一件事我不明白。将AutowireViewModel设置为true时,ViewModelLocator会自动为我填充BindingContext,这很不错。事情的顺序不是我所期望的。首先,对View上的属性进行绑定,然后触发OnNavigatedTo。这意味着我在View上收到参数时,属性的初始化已经完成。我可以通过执行RaisePropertyChanged解决此问题。这将导致以下情况:
在绑定开始之前,有没有一种方法可以在ViewModel中初始化数据?
实际上是Xamarin.Forms的Prism,长期以来一直支持在将View推送到NavigationStack之前初始化ViewModel。也就是说,必须考虑操作顺序。例如,我们无法对ViewModel执行一堆操作,然后将其附加到View。
执行操作的顺序如下:
对于绝大多数情况,如果您已正确初始化ViewModel,则此过程完全可以根据需要进行。如果在某些极端情况下必须绝对确保在设置ViewModel之前对其进行初始化,那么您将需要手动进行处理。
public partial class ViewA : ContentPage, IInitialize
{
private ViewAViewModel ViewModel { get; }
public ViewA(ViewAViewModel viewModel)
{
ViewModel = viewModel;
// Explicitly Opt Out of Autowiring
ViewModelLocator.SetAutowireViewModel(this, false);
InitializeComponent();
}
public void Initialize(INavigationParameters parameters)
{
ViewModel.Initialize(parameters);
BindingContext = ViewModel;
}
}