我正在使用 MVVM 模式创建一个应用程序,我需要在其中从 RSS 提要加载数据。这需要一些时间,所以我想使用进度条来显示加载过程。如何在视图模型中使用 MVVM 模式通过异步和 IsBusy 状态来实现这一点?如果有人有,请提供代码。进度条的 UI 代码是:
<ProgressBar IsIndeterminate={Binding IsBusy} />
ViewModel 中的代码应该是什么?
我正在使用 MVVM 模式创建一个应用程序,我需要在其中从 RSS 提要加载数据。这需要一些时间,所以我想使用进度条来显示加载过程。如何在视图模型中使用 MVVM 模式通过异步和 IsBusy 状态来实现这一点?如果有人有,请提供代码。进度条的 UI 代码是:
<ProgressBar IsIndeterminate={Binding IsBusy} />
ViewModel 中的代码应该是什么?
您还应该绑定Visibility
属性。并且因为它需要Visibility
枚举值,所以您必须使用BooleanToVisibilityConverter
转换器:
<Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
</Resources>
<ProgressBar IsIndeterminate={Binding IsBusy}
Visibility="{Binding IsBusy, Converter={StaticResource BooleanToVisibility}}" />
NotifyPropertyChanged
对于您的 ViewModel,您只需要一个触发事件的 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 线程,并且您的 UI 将不会更新。