【问题标题】:Display progress bar while data is loading加载数据时显示进度条
【发布时间】:2017-06-19 19:15:05
【问题描述】:

我试图在加载数据时显示进度条,一旦加载数据,我想隐藏进度条。

出于测试目的,我刚刚添加了 10 秒,它可以工作。

private async Task ProgressBarAsync()
{
    _isProgressVisible = true;
   RaisePropertyChanged(() => IsProgressVisible);

   await Task.Delay(TimeSpan.FromSeconds(10)).ConfigureAwait(false);

    isProgressVisible = false;
    RaisePropertyChanged(() => IsProgressVisible);
}

但是,在下面的实际代码中,不显示进度条。

private async Task RefreshStudentList()
{
   //display progressbar
   _isProgressVisible = true;
   RaisePropertyChanged(() => IsProgressVisible);

   // load data
   var task =  _studentService.GetStudentAsync();
   await task;
   Students = new ObservableCollection<StudentViewModel>(task.Result.ConvertAll(x => new ClassViewModel(x)));

   //hide progressbar
   _isProgressVisible = false;
    RaisePropertyChanged(() => IsProgressVisible);
}

【问题讨论】:

  • 您确定已正确绑定 IsProgressVisible 吗?
  • 查看我更新的问题
  • 您确定从 UI 线程调用 RefreshStudentList 方法吗?您应该尝试封装您的“RaisePropertyChanged(() => IsProgressVisible);”调用 InvokeOnMainThread(() => ...);
  • 你能在代码中说明你的想法吗?

标签: c# android xamarin xamarin.android mvvmcross


【解决方案1】:

使用 InvokeOnMainThread 试试这个:

private async Task RefreshStudentList()
{
   //display progressbar
   _isProgressVisible = true;
   InvokeOnMainThread(() => RaisePropertyChanged(() => IsProgressVisible));

   // load data
   var data =  await _studentService.GetStudentAsync();
   Students = new ObservableCollection<StudentViewModel>
       (data.ConvertAll(x => new ClassViewModel(x)));

   //hide progressbar
   _isProgressVisible = false;
   InvokeOnMainThread(() => RaisePropertyChanged(() => IsProgressVisible));
}

【讨论】:

  • 很遗憾,我刚试过,还是不行。
  • 是否可以使用您的代码创建一个 github 示例项目?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2011-06-19
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
相关资源
最近更新 更多