Question

J'ai un modèle de contrôle avec un bouton bascule. Cette propriété ToggleButton est liée à une propriété IsChecked à une propriété de dépendance. Si je définis la propriété de dépendance explicitement, la liaison fonctionne.

Le problème est que après que j'interagisse avec le bouton bascule de l'interface utilisateur, les liaisons ne mettent pas à jour la propriété IsChecked si je définis explicitement la propriété de dépendance.

J'ai un problème avec la liaison TwoWay qui fonctionne bien. Ma question est, pourquoi se comporte-t-il de cette façon? Est-ce que je manque quelque chose? Existe-t-il un bug dans le mécanisme de liaison de Silverlight?

MODIFIER POUR INCLURE SNIPPET:

La liaison dans le ControlTemplate ressemble à quelque chose comme (pourrait être remplacée par TemplateBinding)

<ToggleButton x:Name="PlayPause" Grid.Column="0" 
              IsChecked="{Binding Paused, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
              HorizontalAlignment="Center"
              Width="50" Height="50"/>

Le paramétrage explicite de la propriété de dépendance est la norme standard:

myComponent.Paused = true;
Était-ce utile?

La solution

WPF supprime les liaisons à sens unique lorsque la propriété cible (IsChecked dans ce cas) est modifiée. Silverlight conservait la liaison lorsque IsChecked était modifié. Si l'option Pause était définie ultérieurement, cette valeur écraserait également IsChecked.

Selon vous, il semblerait que Silverlight soit revenu au comportement WPF. Tant pis. Personnellement, je considère que la modification d'une propriété liée est un bogue. Si les propriétés ne sont pas censées être synchronisées, la commande peut être une meilleure solution.

Autres conseils

  1. Vous devez utiliser la liaison TwoWay
  2. Assurez-vous que l'objet contenant votre propriété Paused prend en charge INotifyPropertyChanged.
  3. Assurez-vous que le configurateur de Pause déclenche l'événement PropertyChanged
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top