2009-09-11 9 views
2

J'ai un modèle de contrôle avec un bouton bascule. Ce ToggleButton a sa propriété IsChecked lié d'une manière à une propriété de dépendance. Si je définis explicitement la propriété de dépendance, la liaison fonctionne.Pourquoi obtenir des résultats de liaison incohérents?

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

J'ai un travail en utilisant la liaison TwoWay qui fonctionne bien. Ma question est la suivante: pourquoi se comporte-t-il de cette façon? Est-ce que je manque quelque chose? Y a-t-il un bug dans le mécanisme de liaison de Silverlight?

EDIT INCLURE SNIPPET:

La liaison dans le ControlTemplate ressemble à quelque chose comme (pourrait être remplacé 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ètre explicite de la propriété de dépendance est la norme assez tourbière:

myComponent.Paused = true; 
+0

Il serait utile si vous pouviez poster un petit échantillon de code pour démontrer le problème. –

Répondre

2

WPF supprime une des liaisons façon lorsque la propriété cible (isChecked dans ce cas) est modifié. Silverlight utilisé pour conserver la liaison lorsque IsChecked a été modifié. Si Pause a été défini ultérieurement, cette valeur écrase également IsChecked. Selon vous, il semble que Silverlight est revenu au comportement WPF. Tant pis. Personnellement, je considère la modification d'une propriété liée comme un bug. Si les propriétés ne sont pas destinées à être synchronisées, la commande peut être une meilleure solution.

1
  1. Yo Vous devez utiliser la liaison TwoWay
  2. Assurez-vous que l'objet qui contient votre propriété en pause prend en charge INotifyPropertyChanged.
  3. Assurez-vous que le poseur de Paused déclenche l'événement PropertyChanged
Questions connexes