Windows应用商店应用 - 动态数据绑定

时间:2013-10-01 08:03:59

标签: c# xaml data-binding

我想在语法上更新我的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()设置的第一个值... 哪种是动态绑定的正确方法?!?!

1 个答案:

答案 0 :(得分: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()),或者您需要以不同的方式将更新后的值放入该属性。