2011-04-12 88 views
3

我想通过使用数据绑定来更新我的进度条。 XAML文件包含进度:WPF ProgressBar不更新?

<ProgressBar Height="23" Name="progressBar" VerticalAlignment="Bottom" Margin="207,444,0,0" Minimum="0" Maximum="{Binding ProgressBarMax}" Value="{Binding ProgressBarValue}" /> 

我有关C#类中有吸附剂&二传手:

private int progressBarMax; 
    public int ProgressBarMax 
    { 
     get 
     { 
      if (this.progressBarMax == 0) 
       this.progressBarMax = 1; 
      return this.progressBarMax; 
     } 
     set 
     { 
      this.progressBarMax = value; 
     } 
    } 

    private int progressBarValue; 
    public int ProgressBarValue 
    { 
     get 
     { 
      return progressBarValue; 
     } 
     set 
     { 
      progressBarValue = value; 
     } 
    } 

在我的“更新”方法的最大正在设置。例如像this.progressBarMax = 100;。在一个循环中,进度条值的值为+ = 1.要查看我使用Application.DoEvents()的更新,稍后我将实现线程。数据绑定必须是正确的,因为我有其他组件可以正常工作。

那么为什么我的进度条没有更新?

谢谢你的帮助。

+0

“Application.DoEvents()”是做什么的?它不是一个标准的WPF函数。 – Jens 2011-04-12 09:28:00

+0

我知道。正如我所说,它很快就会被线程取代,但对于一些测试,它会在我的循环中显示更改。 – oopbase 2011-04-12 09:37:01

回答

0

我在代码中发现了错误。不幸的是,我改变了我的私人成员,而不是公共财产。所以当使用this.ProgressBarValue += 1;而不是this.progressBarValue += 1;一切正常。

1

您需要实现一种方法,以便在ProgressBarValue发生更改时通知ProgressBar。看看INotifyPropertyChanged接口。

+0

正如我在文中所说的那样,它得到了实施。其他组件正在更新。我使用MVVM,所以我的ViewModelBase扩展了INotifyPropertyChanged。 – oopbase 2011-04-12 08:50:13

+0

@ Forlan07:然后你的属性设置器应该包含一个调用'OnPropertyChanged(“ProgressBarValue”)' – Jens 2011-04-12 08:53:16

+0

我已经尝试过,但似乎没有发生......顺便说一句,我不需要使用该函数为我的列表框数据绑定等。 – oopbase 2011-04-12 09:00:21

1

INotifyPropertyChanged让你的UI控件检测更新值呢?

// daniel

1

我曾希望实际添加评论到原来的帖子,但我将不得不解决有关通过答案文本bax输入的原始问题。你可以将你的代码作为一个单元发布吗?也就是说,您需要添加所有代码才能完成绑定?我无法将所有的部分组合在一起,为我的进度条获取最大值和数值的数据绑定,这可能会有所帮助。