MvvmCross中的异步Init和属性已更改

时间:2013-10-16 16:04:19

标签: mvvmcross

我在视图模型中有一些来自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);
    }

1 个答案:

答案 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;
    }
}