我们有一个带有 FreshMvvm 的 Xamarin.Forms 应用程序。现在,由于 Xamarin.Forms 从明年开始将不再获得支持,因此我正在使用 .Net Maui 重写该应用程序。对于 MVVM 模式,我尝试使用 CommunityToolkit.Mvvm。但我想知道现在如何初始化视图模型。使用 FreshMvvm 我可以重写 Init(),但 CommunityToolkit.Mvvm 似乎没有这样的东西。由于没有异步构造函数,异步初始化视图模型的正确方法是什么?
我一周前开始使用 .net Maui,并且还需要能够在视图模型的构造函数中运行异步代码。我从
SafeFireAndForget
(nuget包)找到了方法
AsyncAwaitBestPractices
。异步代码将在不同的线程中运行,构造函数可能会在异步方法之前完成。
在
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
我目前正在致力于将我们的应用程序从 XF 迁移到毛伊岛。 我也想从 FreshMVVM 更改为 CommunityToolkit.MVVM。
之前,我有带有一些 InitData 的 Init 函数,例如
public override void Init(object initData)
{
base.Init(initData);
if( initData is TextInfoViewModel model )
{
Heading = model.Heading;
HeaderTitle = model.HeaderText;
Text = model.Text;
}
}
该数据是通过以下方式给出的:
this.CreateNavigationCommand<AccountAboutPageModel>(false, true, ETransitionType.SlideFromRight, vm);
如何使用 Toolkit MVVM 执行此操作?