4
我有一些來自Init視圖模型的異步調用。問題是,有時異步調用會在OnCreate之前返回,並且UI中的屬性不會更新。 當我們需要初始化異步數據時,這種情況是否有適當的異步/等待模型?async Init和Property Changed in MvvmCross
僞代碼:
// 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);
}
你的代碼看起來應該可以工作。首先要檢查的是'Url' setter實際上正在提升'PropertyChanged'。你也可以找到我的[異步初始化博客文章](http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html)。 –
因爲你顯示的所有內容都是在UI線程上同步的,所以''Async'調用可以在調用'ViewModel.PropertyChanged + = ViewModel_PropertyChanged;'之前返回的唯一方法就是如果'async'調用同步執行 - 所以你可以只需在你的'OnCreate'方法中檢查 - 'if(ViewModel.Url'= null)...' – Stuart