I have wpf window (MainWindow
.cs) which has button and progress bar.
Button is bound to command inside my viewmodel
<Button Command="{Binding StartMyWork}" Content="Run" Width="200" Height="50"/>
progress bar is bound to CurrentProgress property also in viewmodel
<ProgressBar Value="{Binding CurrentProgress, Mode=OneWay}" Width="400"/>
MainWindowViewModel.cs
private ICommand _StartMyWork;
public ICommand StartMyWork;
{
get {
if (_StartMyWork == null) {
_StartMyWork = new RelayCommand(
x => this.DoSomeDummyWork(this.MySelectedComboValue)
);
}
return _StartMyWork;
}
}
private void DoSomeDummyWork(string mySelectedComboProp)
{
// here I want to simulate some work
// and make ui responsive and introduce progressbar
}
I was thinking using this answer
So I added in the same viewmodel
private ICommand _InstigateWorkCommand;
private double _CurrentProgress;
private BackgroundWorker _Worker;
private void DoSomeDummyWork(string mySelectedComboProp)
{
// here I want to simulate some work
// and make ui responsive and introduce progressbar
_InstigateWorkCommand = new RelayCommand(x => _Worker.RunWorkerAsync(), x => !_Worker.IsBusy);
_Worker = new BackgroundWorker();
_Worker.DoWork += DoWork;
_Worker.ProgressChanged += this.ProgressChanged;
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
_CurrentProgress = e.ProgressPercentage;
}
public double CurrentProgress
{
get { return _CurrentProgress; }
private set {
if (_CurrentProgress != value){
_CurrentProgress = value;
OnPropertyChanged("CurrentProgress");
}
}
}
private void DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 10; i++) {
Thread.Sleep(1000);
_CurrentProgress = i;
}
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
_CurrentProgress = e.ProgressPercentage;
}
Where I'm wrong in implementing progress bar, I set breakpoint in DoWork method which is never hitted, although first command StartMyWork works as expected.