我想在语法上更新我的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()设置的第一个值... 哪种是动态绑定的正确方法?!?!
答案 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()
),或者您需要以不同的方式将更新后的值放入该属性。