目前我正在学习ReactiveUI,我不知道如何解决这个问题。我想要实现的是一旦加载了反应列表(在这种情况下我使用命令从本地存储加载它)我希望能够触发反应列表中的每个项目然后关闭从api端点获取数据并更新视图模型。
我目前使用此逻辑加载和创建视图模型:
LoadSavedLocations = ReactiveCommand.CreateAsyncTask(async o => {
var savedLocations = await _savedLocationService.GetUserSavedLocations();
return savedLocations;
});
LoadSavedLocations.Subscribe(savedLocations =>
{
foreach (var savedZone in savedLocations)
{
Zones.Add(new ZoneDetailViewModel() {
ZoneId = savedZone.ZoneId,
SavedName = savedZone.SavedName,
});
}
});
我希望能够拥有一个可以启动的命令(首次加载屏幕,然后当用户提示更新时 - 拉动重新加载)。
有两种方法我认为我可以做到这一点,但努力实现这一方法和代码。
选项1
循环ReactiveList中的项目的命令从Api中获取数据,然后根据
更新该视图模型。UpdateZones = ReactiveCommand.CreateAsyncTask(async o =>
{
foreach (var zone in Zones)
{
// Fetch
// Await
// Update view model
}
return null;
});
有了这个,我很困惑这个命令的返回类型只是new object()
?有没有比这样循环更好的方法呢?
选项2
在视图模型ZoneDetailViewModel
上有一个名为FetchExtraData
的命令,它将从API返回数据,我可以在视图模型中订阅该命令并填充额外的属性。使用此方法,父视图模型如何触发ReactiveList中的所有项以触发其命令。
对于这两种方法,我不知道如何让ReactiveList中的每个项目都执行逻辑,这涉及到Api和更新。