我在更新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
-可以。 最佳答案
在可扩展应用程序标记语言(XAML)中绑定Minimum和Maximum值时,请首先为Binding声明Maximum。如果在Binding之后声明了Maximum的Minimum,则Maximum的绑定值将被忽略,并且会发生以下情况:
如果绑定的Minimum值为负,则Maximum值设置为0。
如果绑定的Minimum值大于默认的Maximum(对于Slider和ProgressBar为100),则将Maximum值设置为等于Minimum值。
为避免此行为,请首先在可扩展应用程序标记语言(XAML)中为Binding声明Maximum。
有关更多信息,请参见Maximum属性下的Note。
并且在绑定Value属性时,Binding必须为TwoWay
。因此,您可以像下面这样更改代码:
<ProgressBar Maximum="{Binding Finish, Mode=OneTime}" Minimum="{Binding Start, Mode=OneTime}" Value="{Binding CurrentTime,Mode=TwoWay}" />
然后它应该能够工作。
关于c# - UWP ProgressBar和绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42497971/