如何使用进度条显示使用异步加载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}}" />
答
佛您的视图模型,你只需要其中一个触发事件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
,有许多资源,在那里,以帮助这一点。
由于以前的答案的一个建议,你需要使用BooleanToVisibilityConverter
从bool
值转换为Visibility
值显示/隐藏ProgressBar
。
此外,除非您执行从后台线程检索RSS源的工作,否则不会反映对用户界面的更改。否则,您将阻止UI线程,并且您的UI将不会更新。
Thanx为您的答案。请你可以提供视图模型的代码来处理进度条 – djain 2013-03-03 16:47:07