Xamarin-FreshMVVM Init не работает асинхронно
Это приложение Xamarin, и я пытаюсь вызвать асинхронный метод внутри Init, реализованного в FreshMVVM, но, похоже, не работает.
Когда я загружаю страницу, ListView пуст, хотя привязки верны. На самом деле, если я удаляю вызовы await с некоторыми константами int, ListView отображается правильно.
public class MainPageModel : BasePageModel
{
private IService _service;
public List<ModeMenuItem> List { get; set; }
public MainPageModel(IService Service)
{
_service = Service;
}
public override async void Init(object initData)
{
base.Init(initData);
List = new List<ModeMenuItem>()
{
new ModeMenuItem()
{
Name ="Test 1",
Image ="\uE7EE",
ViewModelType =null,
TotalRequests = await _service.Count()
},
new ModeMenuItem()
{
Name ="Test 2",
Image ="\uE913",
ViewModelType =null,
TotalRequests =await _service.Count()
},
new ModeMenuItem()
{
Name ="Test 3",
Image ="\uE8CF",
ViewModelType =null
}
};
}
}
1 ответ
Решение
Поскольку вы задерживаете заполнение и инициализацию своих данных, вы предоставляете ListView
вам нужно либо:
- Воплощать в жизнь
INotifyPropertyChanged
на вашей ViewModel и запустить его при созданииList
имущество. - Сделай свой
List
ObservableCollection
и создать его экземпляр в конструкторе ViewModel, а затем просто заполнить его в более поздний момент времени.
Вы также можете смешать два.
Таким образом, вариант 1. будет просто вызвать событие PropertyChanged:
private List<ModeMenuItem> _list;
public List<ModeMenuItem> List
{
get => _list;
set
{
_list = value;
RaisePropertyChanged();
}
}
Вариант 2. будет:
public ObservableCollection<ModeMenuItem> List { get; }
= new ObservableCollection<ModeMenuItem>();
а затем заполнить его, не обновляя новую коллекцию:
List.Add();