我正在根据调用webservice调用来加载数据透视项。鉴于我所拥有的只是异步调用,如何在完成时捕获它?
我的主要原因是我想在等待回调时保持加载对话框。但是,我正在加载一个viewmodel类,显然加载栏位于页面类中。
老实说,如果我只知道何时加载了一个数据透视项,那就没问题,但是在loadedpivotitem上设置事件处理程序似乎永远不会触发。
答案 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;
}