4

ビューモデルで 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);
    }
4

1 に答える 1

3

将来、メソッドに追加のプロパティを追加する可能性があるため、おそらくメソッドでこのような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;
    }
}
于 2013-10-16T17:37:12.503 に答える