如何在MVVM中使用Progressbar

时间:2016-01-07 16:32:49

标签: c# wpf mvvm progress-bar

我真的坚持这个。我在网上搜索了很多,但实际上没有任何帮助。在我看来,我有一个按钮和进度条,当用户点击按钮时它会做不同的工作,并在增加 CurrentProgress 之后。

但它最终只向用户显示100%的工作结果并不是我想要的。我希望每当 CurrentProgress 增加时它会显示并显示到视图中。

视图中的控件是:

<Button x:Name="Generate" Content="Generate" />
<ProgressBar  Value="{Binding Path=CurrentProgress, Mode=OneWay}" Width="80" Height="15"/>

这是ViewModel中的代码

private int currentProgress;
public int CurrentProgress
{
    get { return currentProgress; }
    set
    {
        if (currentProgress == value)       
            return;

        currentProgress = value;
        NotifyOfPropertyChange(() => CurrentProgress);
    }
}

List<Article> articles;


public void Generate()
{
    foreach (var art in articles)
    {       
        //[..]
        //Insert article                    

        inserted++;

        Task.Factory.StartNew(() =>updateProgress(inserted));                    
    }

}


private void updateProgress(int Analyzed)
{
    if (Analyzed != 0)
    {
        int percentage = 100 * Analyzed / articles.Count;
        CurrentProgress = percentage;
    }   
}

如何解决问题?提前全部感谢!

1 个答案:

答案 0 :(得分:1)

把&#34;生成&#34;的全部内容放在一起。任务中的方法。然后,您不需要做任何特别的事情来更新进度,因为&#34; NotifyPropertyChanged&#34; WPF会在UI级别自动编组事件。 像这样:

Task.Factory.StartNew(() => {
    foreach (var art in articles)
    {       
        //[..]
        //Insert article                    

        inserted++;

        updateProgress(inserted);                    
    }
}