我们有一个带有FreshMvvm的Xamarin.Forms应用程序。现在,由于Xamarin.Forms从明年开始将不会得到支持,我正在用.Net Maui重新编写该应用程序。对于MVVM模式,我正在尝试使用CommunityToolkit.MVVM。但我想知道现在如何初始化视图模型。使用FreshMvvm,我可以覆盖Init((,但CommunityToolkit.Mvvm似乎没有这样的功能。由于没有异步构造函数,异步初始化视图模型的正确方法是什么?
我几周前开始使用.net Maui,还需要在视图模型的构造函数中运行异步代码。我从AsyncAwaitBestPractices
(nuget包(中找到了方法SafeFireAndForget
。异步代码将在不同的线程中运行,构造函数可能会在异步方法之前完成。
在FreshMVVM
中,由于模型已经实现了FreshBasePageModel
,您可以覆盖Init()
方法并初始化数据,如下面的伪代码:
public override void Init (object initData)
{
//initialize data
}
然而,在CommunityToolkit.Mvvm
中,您可以在默认构造函数中随意设置数据,如下所示:
public partial class MainPage : ContentPage
{
public MainPage(MainPageViewModel vm)
{
InitializeComponent();
BindingContext = vm;
Initialize();
}
public async void Initialize()
{
//await operation
}
}
官方参考链接:https://learn.microsoft.com/en-us/windows/communitytoolkit/mvvm/introduction