0

这是一个 Xamarin 应用程序,我试图在FreshMVVM中实现的Init中调用异步方法,但似乎不起作用。

当我加载页面时,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
            }
        };
    }
}
4

1 回答 1

3

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

  1. 在您的 ViewModel 上实现INotifyPropertyChanged并在您创建List属性时触发它。
  2. 制作您List的 anObservableCollection并在 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();
于 2017-09-15T12:07:33.617 回答