它是一个Xamarin应用程序,我试图在 FreshMVVM 中实现的 Init 中调用异步方法,但似乎不起作用。
当我加载页面时,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
}
};
}
}
答案 0 :(得分:3)
由于您要延迟提供给ListView
所需数据的人口和初始化,您需要:
INotifyPropertyChanged
并在您创建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();