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
的数据的填充和初始化,因此您需要:
- 在您的 ViewModel 上实施
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();
这是一个 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
的数据的填充和初始化,因此您需要:
- 在您的 ViewModel 上实施
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();