如何实现使用MVVM模式的进度条 [英] How to implement a progress bar using the MVVM pattern
本文介绍了如何实现使用MVVM模式的进度条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个建立在MVVM设计模式的WPF应用程序。
I have a WPF application which is built on the MVVM design pattern.
我想实现在应用程序的进度条,下面的MVVM模式。
I wish to implement a progress bar in the app, that follows the MVVM pattern.
没有任何一个有关于如何实现这个有什么建议?
Does any one have any suggestions on how to implement this?
在此先感谢
推荐答案
通常你的用户界面将简单地绑定到你的虚拟机属性:
Typically your UI would simply bind to properties in your VM:
<ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" Visibility="{Binding ProgressVisibility}"/>
您将虚拟机使用 的BackgroundWorker
做在后台线程的工作,并定期更新 CurrentProgress
值。事情是这样的:
Your VM would use a BackgroundWorker
to do the work on a background thread, and to periodically update the CurrentProgress
value. Something like this:
public class MyViewModel : ViewModel
{
private readonly BackgroundWorker worker;
private readonly ICommand instigateWorkCommand;
private int currentProgress;
public MyViewModel()
{
this.instigateWorkCommand = new DelegateCommand(o => this.worker.RunWorkerAsync(), o => !this.worker.IsBusy);
this.worker = new BackgroundWorker();
this.worker.DoWork += this.DoWork;
this.worker.ProgressChanged += this.ProgressChanged;
}
// your UI binds to this command in order to kick off the work
public ICommand InstigateWorkCommand
{
get { return this.instigateWorkCommand; }
}
public int CurrentProgress
{
get { return this.currentProgress; }
private set
{
if (this.currentProgress != value)
{
this.currentProgress = value;
this.OnPropertyChanged(() => this.CurrentProgress);
}
}
}
private void DoWork(object sender, DoWorkEventArgs e)
{
// do time-consuming work here, calling ReportProgress as and when you can
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.CurrentProgress = e.ProgressPercentage;
}
}
这篇关于如何实现使用MVVM模式的进度条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文