0

我想动态更新我的 XAML 中定义的 ProgressBar 的值:

<ProgressBar HorizontalAlignment="Center"
                 Height="90" Margin="0,-30,0,0" 
                 VerticalAlignment="Center" 
                 Width="600" x:Name="BarProgress" Value="{Binding Test}" Maximum="100" />  

在页面的控制中,我定义了这个类:

public class TestData
{
    public double Test { get; set; }
}

在 LoadState 方法中:

TestData data = new TestData();
data.Test = downloadData.ProgressValue();
BarProgress.DataContext = data;

最后在负责下载文件的类中,我有 ProgressValue 函数,它返回下载的百分比。绑定似乎有效,但它不是动态的...我可以在 ProgressBar 中看到我为 downloadData.ProgressValue() 设置的第一个值...动态绑定的正确方法是什么?!?!

4

1 回答 1

0

您的财产Test不会通知,它只是使用自动生成的支持字段。

您还将从函数 ( ProgressValue()) 返回的值类型分配给该属性而不是对象。这意味着在任何阶段都不会发生属性更改通知,因此数据绑定永远不会知道值已更改。

您需要扩展您的TestData课程:

public class TestData : INotifyPropertyChanged
{
    public double Test 
    { 
        get { return _test; } 
        set 
        { 
            _test = value;  
            OnPropertyChange("Test");
        }
    }

    private double _test;

    private void OnPropertyChange(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChanged;
}

(完全凭记忆输入,不是从编辑器复制粘贴的,请原谅任何错别字)

并且您还需要定期更新值(通过重复调用ProgressValue()),或者您需要找出一种不同的方式将更新后的值放入该属性中。

于 2013-10-01T10:01:09.193 回答