UWP 进度条和绑定
Posted
技术标签:
【中文标题】UWP 进度条和绑定【英文标题】:UWP ProgressBar and Binding 【发布时间】:2017-07-18 18:54:20 【问题描述】:我在更新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
已绑定,OK。 Finish
已绑定,OK。 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
- 没关系。
【问题讨论】:
【参考方案1】:在可扩展应用程序标记语言 (XAML) 中绑定 Minimum 和 Maximum 值时,首先为 Maximum 声明 Binding。如果Maximum 的Binding 在Minimum 之后声明,则Maximum 的绑定值将被忽略,可能会出现以下情况:
如果绑定的Minimum 值为负,则Maximum 值设置为0。 如果绑定的Minimum 值大于默认Maximum(Slider 和ProgressBar 为100),则Maximum 值设置为等于Minimum 值。为避免这种行为,请首先在您的可扩展应用程序标记语言 (XAML) 中为 Maximum 声明 Binding。
有关详细信息,请参阅Maximum 属性下的注意。
在绑定Value 属性时,Binding 必须是TwoWay
。所以你可以像下面这样改变你的代码:
<ProgressBar Maximum="Binding Finish, Mode=OneTime" Minimum="Binding Start, Mode=OneTime" Value="Binding CurrentTime,Mode=TwoWay" />
那么它应该可以工作了。
【讨论】:
是的,非常完美!谢谢!【参考方案2】:我认为这会解决它
<ProgressBar
Minimum="Binding Min, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"
Maximum="Binding Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged"
Value="Binding Progress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged">
</ProgressBar>
【讨论】:
以上是关于UWP 进度条和绑定的主要内容,如果未能解决你的问题,请参考以下文章