如何使用CommunityToolkit.Mvvm初始化ViewModel

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

我们有一个带有 FreshMvvm 的 Xamarin.Forms 应用程序。现在,由于 Xamarin.Forms 从明年开始将不再获得支持,因此我正在使用 .Net Maui 重写该应用程序。对于 MVVM 模式,我尝试使用 CommunityToolkit.Mvvm。但我想知道现在如何初始化视图模型。使用 FreshMvvm 我可以重写 Init(),但 CommunityToolkit.Mvvm 似乎没有这样的东西。由于没有异步构造函数,异步初始化视图模型的正确方法是什么?

maui freshmvvm maui-community-toolkit community-toolkit-mvvm
3个回答
0
投票

我一周前开始使用 .net Maui,并且还需要能够在视图模型的构造函数中运行异步代码。我从

SafeFireAndForget
nuget包
)找到了方法AsyncAwaitBestPractices。异步代码将在不同的线程中运行,构造函数可能会在异步方法之前完成。


0
投票

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


0
投票

我目前正在致力于将我们的应用程序从 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 执行此操作?

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