如何在WP7上等待异步调用完成?

时间:2011-08-08 17:58:19

标签: windows-phone-7 windows-phone-7.1

我正在根据调用webservice调用来加载数据透视项。鉴于我所拥有的只是异步调用,如何在完成时捕获它?

我的主要原因是我想在等待回调时保持加载对话框。但是,我正在加载一个viewmodel类,显然加载栏位于页面类中。

老实说,如果我只知道何时加载了一个数据透视项,那就没问题,但是在loadedpivotitem上设置事件处理程序似乎永远不会触发。

2 个答案:

答案 0 :(得分:3)

我假设您正在将View数据绑定到ViewModel。在这种情况下,您需要做的就是创建一个bool属性,并在加载/等待异步调用时将其设置为true。你可以这样做:

private bool isSyncing;
    public bool IsSynchronizing
    {
        get { return this.isSyncing; }
        set
        {
            this.isSyncing = value;
            this.RaisePropertyChanged(() => this.IsSynchronizing); //Use appropriate RaisePropertyChanged method for your MVVM implementation
        }
    }

在开始异步调用之前,您将设置IsSynchronizing = true。在事件处理程序结束时设置IsSynchronizing = false;

从您的视图中,您可以绑定到此bool。对于装载栏,它可能是这样的:

<ProgressBar Visibility="{Binding IsSynchronizing, Converter={StaticResource booleanToVisibilityConverter}}" IsIndeterminate="{Binding IsSynchronizing}" Style="{StaticResource PerformanceProgressBar}" />

在您的场景中,您可以使用反转的BooleanToVisibilityConverter在仍在加载时隐藏枢轴。

希望这会有所帮助,如果您需要有关使用BooleanToVisibilityConverters的更多信息,请告诉我

答案 1 :(得分:1)

您需要连接一个类似于此代码块中所示的事件处理程序:

public void LoadData()
{
    SampleDataServiceClient client = new SampleDataServiceClient();
    client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
    client.GetDataAsync();
}

void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    this.DataContext = e.Result;
}