2017-02-27 3 views
1

J'ai une situation très étrange avec la mise à jour ProgressBar. Fondamentalement, j'ai SemanticZoom et en mode ZoomedIn j'ai ListView. Chaque ListView contient ProgressBar. Et voici le plus intéressant.UWP ProgressBar et la liaison

de travail (valeurs définies par moi):

<ProgressBar Minimum="1488240000" Maximum="1488241000" Value="{Binding CurrentTime, Mode=OneWay}" /> 

ne fonctionne pas (les valeurs sont obligatoires):

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

La façon dont il ne fonctionne pas comme ça: Start est binded, OK. Finish est lié, OK. CurrentTime est binded, PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime))) trigged, mais ici:

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 
     } 
    } 

Donc, il y a certainement quelque chose à getter. Des idées? Par ailleurs, lorsque je joue avec la position des propriétés ProgressBar j'ai des résultats étranges. Par exemple, si je définis Minimum, puis Maximum puis Value j'ai ProgressBar 100%. Si je mets Value, Maximum et Minimum - c'est OK.

Répondre

3

Lors de la liaison Minimum et Maximum valeurs dans Extensible Application Markup Language (XAML), déclarer la Binding pour Maximum premier. Si le Binding pour Maximum est déclaré après Minimum, la valeur limite pour Maximum est ignorée et les situations suivantes peuvent se produire:

Pour éviter ce comportement, déclarer la Binding pour Maximum d'abord dans votre Extensible Application Markup Language (XAML).

Pour plus d'informations, s'il vous plaît voir Remarque sous la propriété Maximum.

Et tout en liant la propriété Value, le Binding doit être TwoWay. Donc, vous pouvez changer votre code comme suit:

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

Ensuite, il devrait être en mesure de travailler.

+0

Oui, c'est parfait! Je vous remercie! – Vlad

1

Je pense que cela va corriger

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