绑定WPF进度条永远不会更新

时间:2015-02-05 22:55:41

标签: c# wpf

在OnPropertyChanged()期间,PropertyChanged事件始终为NULL,因此永远不会调用该事件。我错过了什么?

以下是XML代码:

<ProgressBar x:Name="ProgressBar1" Value="{Binding PBarValue, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="20" Minimum="0" Maximum="100"></ProgressBar>

C#代码:

public PBar progress_bar = new PBar();

public class PBar : INotifyPropertyChanged
{
    private int _progress;
    public int progress
    {
        get { return _progress; }
        set
        {
            if (value != _progress)
            {
                _progress = value;
                OnPropertyChanged("PBarValue");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

private void Main_Initialized(object sender, EventArgs e)
{
    ProgressBar1.DataContext = progress_bar;
    progress_bar.progress=75;  // This does call the set and
                               // OnPropertyChanged but
                               // PropertyChanged is always null
                               // so it never updates UI
}

我正在设置&#34;值&#34;来自另一个线程的进度条,所以这就是我需要绑定的原因。

在这一点上,我已经尝试了很多不同的方法,我的头在旋转!

2 个答案:

答案 0 :(得分:1)

更改您的xaml以绑定到进度:

<ProgressBar x:Name="ProgressBar1" Value="{Binding progress, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="20" Minimum="0" Maximum="100"></ProgressBar>

然后更改您的属性以提出关于“进度”的通知而不是“PBarValue”:

private int _progress;
public int progress
{
    get { return _progress; }
    set
    {
        if (value != _progress)
        {
            _progress = value;
            OnPropertyChanged("progress");
        }
    }
}

答案 1 :(得分:0)

请将XAML中的绑定从PBarValue更改为进度。请参阅下面的代码。

<ProgressBar x:Name="ProgressBar1" Value="{Binding progress, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="20" Minimum="0" Maximum="100"></ProgressBar>