2017-02-27 132 views
1

我有更新ProgressBar非常奇怪的情况。 基本上,我有SemanticZoomZoomedIn模式我有ListView。每个ListView包含ProgressBar。这是最有趣的。UWP ProgressBar和Binding

工作(值由我设定):

<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已绑定,确定。 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 - 没关系。

回答

3

当绑定的可扩展应用程序标记语言(XAML)MinimumMaximum值,声明BindingMaximum第一。如果MaximumBindingMinimum后宣布,为Maximum绑定的值被忽略,可能会出现以下情况:

为避免此行为,请在Maximum的第一个用可扩展应用程序标记语言(XAML)声明Binding

欲了解更多信息,请参阅下Maximum财产注意

虽然绑定Value属性,Binding必须是TwoWay。所以你可以改变你的代码,如下所示:

<ProgressBar Maximum="{Binding Finish, Mode=OneTime}" Minimum="{Binding Start, Mode=OneTime}" Value="{Binding CurrentTime,Mode=TwoWay}" /> 

然后它应该能够工作。

+0

是的,这是完美的!谢谢! – Vlad

1

我认为这将解决它

<ProgressBar 
     Minimum="{Binding Min, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     Maximum="{Binding Max, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     Value="{Binding Progress, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
    </ProgressBar>