如何使用进度条显示使用异步加载MVVM模式的RSS源

问题描述:

我正在创建一个MVVM模式的应用程序,其中需要从RSS源加载数据。这需要一些时间,所以我想使用进度条显示加载过程。我如何通过在视图模型中使用MVVM模式的异步和IsBusy状态来实现这一点?如果任何人有,请提供代码。 在进度条UI代码是:如何使用进度条显示使用异步加载MVVM模式的RSS源

<ProgressBar IsIndeterminate={Binding IsBusy} /> 

什么应该是在视图模型的代码呢?

您还应该绑定Visibility属性。而且由于它预计Visibility枚举值,你必须使用BooleanToVisibilityConverter转换器:

<Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibility" /> 
</Resources> 

<ProgressBar IsIndeterminate={Binding IsBusy} 
      Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibility}}" /> 
+1

Thanx为您的答案。请你可以提供视图模型的代码来处理进度条 – djain 2013-03-03 16:47:07

佛您的视图模型,你只需要其中一个触发事件NotifyPropertyChanged的IsBusy财产。

public class MyViewModel : INotifyPropertyChanged 
{ 
    private bool _isBusy; 

    public bool IsBusy 
    { 
     get { return _isBusy; } 
     set 
     { 
      _isBusy = value; 
      this.RaisePropertyChanged("IsBusy"); 
     } 
    } 

    private void BeginWorking() 
    { 
     this.IsBusy = true; 
     //Do the work... 
    } 
    private void FinishWorking() 
    { 
     this.IsBusy = false; 
    } 

    //Other implementation, including INotifyPropertyChanged... 
} 

如果你不熟悉的执行INotifyPropertyChanged,有许多资源,在那里,以帮助这一点。

由于以前的答案的一个建议,你需要使用BooleanToVisibilityConverterbool值转换为Visibility值显示/隐藏ProgressBar

此外,除非您执行从后台线程检索RSS源的工作,否则不会反映对用户界面的更改。否则,您将阻止UI线程,并且您的UI将不会更新。