WPF进度条不更新?

3

我正在尝试通过使用数据绑定来更新我的进度条。XAML文件中包含了该进度条:

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

我的相关C#类包含getter和setter:

    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; 
        }
    }

在我的“update”方法中,最大值被设置。例如,像是this.progressBarMax = 100;一样。在循环中,进度条的值会逐渐+1。为了看到更新,我使用了Application.DoEvents(),后面我会实现线程。数据绑定必须正确,因为我还有其他正常工作的组件。
那么,为什么我的进度条没有更新呢?
感谢您的帮助。

"Application.DoEvents()" 是什么意思?它不是标准的 WPF 函数。 - Jens
我知道。正如我所说,它很快就会被线程取代,但是在某些测试中,在我的循环期间它将显示更改。 - oopbase
4个回答

1
你需要实现一种方法,让你的 ProgressBar 在 ProgressBarValue 改变时得到通知。可以查看 INotifyPropertyChanged 接口。

正如我在文本中所说,它已经被实现了。其他组件正在更新中。我使用了MVVM,因此我的ViewModelBase扩展了INotifyPropertyChanged。 - oopbase
@Forlan07:你的属性设置器应该包括对 OnPropertyChanged("ProgressBarValue") 的调用。 - Jens
我已经尝试过了,但好像什么也没发生... 顺便说一下,我在我的列表框数据绑定等方面并不需要使用那个函数。 - oopbase
我认为你把事情搞混了。 - Euphoric

1

使用INotifyPropertyChanged如何让您的UI控件检测到更新的值?

//丹尼尔


1
我本来想在原始帖子中添加评论,但现在只能通过回答文本框提出关于原始帖子的问题。你能把你的代码作为一个整体发布吗?也就是说,你需要添加的所有代码都放在一起吗?我很难将所有的部分组合起来完成进度条的数据绑定,这可能会有所帮助。请保留HTML标签。

0
我在代码中找到了错误。不幸的是,我改变了我的私有成员,而不是公共属性。因此,当使用this.ProgressBarValue += 1;而不是this.progressBarValue += 1;时,一切都正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接