进度条不更新绑定

时间:2013-11-02 21:39:07

标签: c# wpf

我正在尝试创建一个在属性值更改时更新的进度条 我已经关注了其他问题,但我不知道它有什么问题。

这是XAML代码:

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1" x:Class="WpfApplication1.MainWindow"
        Title="MainWindow">
    <Grid Margin="0,0,-8,1">
        <ProgressBar Value="{Binding Progreso, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" Margin="105,95,207,350"/>
        <Button Content="Button" Click="Button_Click" Margin="218,232,333,217"/>

    </Grid>
</Window>

它基本上是一个带有绑定的进度条和一个带有监听器的按钮,使Progreso增加10 这是C#代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string sProp)
    {

        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(sProp));
        }
    }

    float progreso = 10;
    public float Progreso
    {
        get
        {
            return progreso;
        }
        set
        {
            progreso = value;
            NotifyPropertyChanged("Progreso");
        }
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.Progreso = this.Progreso + 10;
    }

}

我试图保持简单,但我无法让它工作,任何帮助都将不胜感激。

编辑:我也尝试过UpdateSourceTrigger = PropertyChanged并且无法正常工作

2 个答案:

答案 0 :(得分:2)

AncestorType似乎不起作用。所以你有两个选择:

  1. 设置窗口Name并按DataContext
  2. 查找ElementName
  3. 在后面的代码中将DataContext设置为this并删除RelativeSource部分

答案 1 :(得分:2)

您的问题是您错过了INotifyPropertyChanged接口实现的声明:

public partial class MainWindow : Window, INotifyPropertyChanged {
  //....
}

注意:使用RelativeSource工作正常,我对此进行了测试。使用DataContext只是一种设置Source的隐式方法,尽管这是一种方便和推荐的方式。

更新

关于使用DataContext

public MainWindow()
{
    InitializeComponent();
    DataContext = this;
}

<ProgressBar Value="{Binding Progreso}" Margin="105,95,207,350"/>