-
[WPF]Perte de binding !
Voilà, pour mon projet (un lecteur audio), j'ai bindé un slider de position à mon objet player, en mode OneWay. Toutes les secondes, mon player envoie un propertychanged, ce qui fait que mon slider "suit" la piste en cours de lecture.
Ensuite, j'écoute l'évènement: PreviewMouseLeftButtonUp, qui me permet de savoir quand l'utilisateur à bougé le slider, et je met mon player à jour dès que je reçois cet évènement. Le problème, c'est que dès que j'agis sur le slider, il ne se met plus à jour ! J'ai débuggé, mais le datacontext est toujours là et reçoit bien les bonnes valeurs. Apparement, c'est juste à l'affichage que ça ne s'actualise plus.
Donc voilà je vois pas trop d'ou ça peut venir, si vous avez dès idées, je suis preneur ;)
-
Voila qui est très étrange... Tu n'as pas un e.Cancel qui traine quelque part ?
-
Non, pas de e.cancel nulle part.
Une piste cependant: en mode "TwoWay", je n'ai pas ce problème. Je pense donc que ça vient du fait qu'on bouge le slider (donc on modifie sa valeur), pendant que le biding en mode OneWay modifie aussi la valeur du slider... un genre de conflit qu'il n'y aurait pas en mode TwoWay, le slider et le player étant synchronisés...
Bref, il faudrait que je puisse désactiver le biding à l'event PreviewMouseLeftButtonDown, et le remettre à l'event PreviewMouseLeftButtonUp. Ouaip, mais j'sais pas faire :aie:
-
Pkoi ne pas simplement mettre ton Binding en mode TwoWay ? C'est après tout le comportement normal pour ton application: tu modifies la valeur du slider => ca modifie la source. Tu modifies la source => la valeur du slider doit être mise à jour
-
Il y a deux raison à cela:
Tout d'abord, j'aimerais que mon player se comporte un peu comme WMP: lorsqu'on a le mouseDown, on continue à lire normalement, et au mouseUp, on actualise la position.
Ensuite, en mode TwoWay, lorsqu'on déplace le slider, le player continue à lire, donc ça fait un bruit très très moche (du style lecture accélérée: blpblpblpblpblpbl)
La solution que j'ai trouvé, c'est de mettre pause au mouseDown, et remettre en lecture au mouseUp, mais ça "coupe" quand même la piste en cours de lecture...
-
Résolu, il suffisait de remettre le binding à chaque mouseUp.