Xamarin-FreshMVVM Init 不以异步方式工作

Xamarin-FreshMVVM Init not working in async way

这是一个 Xamarin 应用程序,我试图在 Init 中调用异步方法,在 FreshMVVM 中实现,但似乎没有上班。

当我加载页面时,ListView 是空的,尽管绑定是正确的。事实上,如果我删除放置一些 int 常量的 await 调用,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
            }
        };
    }
}

由于您延迟了提供给 ListView 的数据的填充和初始化,因此您需要:

  1. 在您的 ViewModel 上实施 INotifyPropertyChanged 并在您创建 List 属性.
  2. 时触发它
  3. 将您的 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();