我在更新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%。如果我设置了ValueMaximumMinimum-可以。

最佳答案

在可扩展应用程序标记语言(XAML)中绑定MinimumMaximum值时,请首先为Binding声明Maximum。如果在Binding之后声明了MaximumMinimum,则Maximum的绑定值将被忽略,并且会发生以下情况:
  
  
  如果绑定的Minimum值为负,则Maximum值设置为0。
  如果绑定的Minimum值大于默认的Maximum(对于SliderProgressBar为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/

10-12 07:37