我在视图模型中有一些来自Init的异步调用。问题是有时异步调用在OnCreate之前返回,并且UI中的属性不会更新。 当我们必须初始化异步数据时,是否存在适用于此情况的异步/等待模型?
伪代码:
// ViewModel
public async Task Init(string id)
{
Url = await LoadUrlAsync(id);
}
// View
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.ui_xml);
ViewModel.PropertyChanged += ViewModel_PropertyChanged;
}
void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
_webView.LoadUrl(ViewModel.Url);
}
答案 0 :(得分:2)
我可能会在OnCreate
方法中执行类似的操作,因为您可能希望将来为其添加其他属性。
private bool _loaded;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.ui_xml);
ViewModel.WeakSubscribe(() => ViewModel.Url, (s,e) =>
{
if (!_loaded)
_webView.LoadUrl(ViewModel.Url);
});
if (ViewModel.Url != null) //Check if the async Init has finished already
{
_webView.LoadUrl(ViewModel.Url);
_loaded = true;
}
}