Как инициализировать ViewModel с помощью CommunityToolkit.Mvvm
У нас есть приложение Xamarin.Forms с FreshMvvm. Теперь, поскольку Xamarin.Forms не будет поддерживаться в следующем году, я переписываю приложение с помощью .Net Maui. Для шаблона MVVM я пытаюсь использовать CommunityToolkit.Mvvm. Но мне интересно, как теперь я могу инициализировать модель представления. С FreshMvvm я мог бы переопределить Init(), но в CommunityToolkit.Mvvm, похоже, нет ничего подобного. Каков правильный способ асинхронной инициализации модели представления, поскольку нет асинхронного конструктора?
2 ответа
В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
Я начал работать с .net Maui несколько недель назад, и мне также нужна была возможность запуска асинхронного кода в конструкторе модели представления. Я нашел методSafeFireAndForget
отAsyncAwaitBestPractices
( пакет nuget ). Асинхронный код будет выполняться в другом потоке, и конструктор может завершиться раньше асинхронного метода.