1

我正在加载基于调用 web 服务调用的数据透视项目。鉴于我所拥有的只是可用的异步调用,我该如何在它完成时进行捕捉?

我的主要原因是我想在等待回调时保持加载对话框。但是,我正在加载视图模型类,显然加载栏在页面类中。

老实说,如果我能知道何时加载了一个数据透视项目,那很好,但是在加载的数据透视表上设置事件处理程序似乎永远不会触发。

4

2 回答 2

3

我假设您正在将您的视图数据绑定到您的视图模型。在这种情况下,您需要做的就是创建一个 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;

从您的角度来看,您可以绑定到此布尔值。对于加载栏,它可能是这样的:

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

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

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

于 2011-08-08T22:46:58.780 回答
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;
}
于 2011-08-08T18:03:17.010 回答