我在更新ProgressBar
时遇到了非常奇怪的情况。
基本上,我有SemanticZoom
并且ZoomedIn
模式我有ListView
。每个ListView
都包含ProgressBar
。这是最有趣的。
工作(由我设定的值):
<ProgressBar Minimum="1488240000" Maximum="1488241000" Value="{Binding CurrentTime, Mode=OneWay}" />
不工作(值绑定):
<ProgressBar Minimum="{Binding Start, Mode=OneTime}" Maximum="{Binding Finish, Mode=OneTime}" Value="{Binding CurrentTime, Mode=OneWay}" />
它的工作方式不是这样的:
绑定Start
,好的。绑定Finish
,好的。 CurrentTime
已绑定,PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime)))
已触发,但此处:
public double CurrentTime
{
get
{
return currentTime;
//It's trigged only first time
//But should be triggered every time PropertyChanged triggered
}
set
{
currentTime = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime)));
//It's OK, it's trigged every time I update this property
}
}
所以,肯定有一些东西可以吸气。有什么想法吗?
顺便说一下,当我玩ProgressBar
属性的位置时,我的结果很奇怪。例如,如果我设置Minimum
,那么Maximum
然后Value
我有ProgressBar
100%。如果我设置Value
,Maximum
和Minimum
- 就没问题。
答案 0 :(得分:3)
在可扩展应用程序标记语言(XAML)中绑定Minimum和Maximum值时,请先为Binding声明Maximum。如果在Binding之后声明Maximum的Minimum,则会忽略Maximum的绑定值,并且可能会出现以下情况:
有关详细信息,请参阅Maximum属性下的注意。
在绑定Value属性时,Binding必须为TwoWay
。因此,您可以更改以下代码:
<ProgressBar Maximum="{Binding Finish, Mode=OneTime}" Minimum="{Binding Start, Mode=OneTime}" Value="{Binding CurrentTime,Mode=TwoWay}" />
然后它应该可以工作。
答案 1 :(得分:1)
我认为这会解决它
<ProgressBar
Minimum="{Binding Min, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Maximum="{Binding Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Value="{Binding Progress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</ProgressBar>