UWP ProgressBar和Binding

时间:2017-02-27 23:57:15

标签: c# xaml uwp winrt-xaml inotifypropertychanged

我在更新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 - 就没问题。

2 个答案:

答案 0 :(得分:3)

  

在可扩展应用程序标记语言(XAML)中绑定MinimumMaximum值时,请先为Binding声明Maximum。如果在Binding之后声明MaximumMinimum,则会忽略Maximum的绑定值,并且可能会出现以下情况:

           

要避免此行为,请先在可扩展应用程序标记语言(XAML)中为Binding声明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>