2011-02-03 2 views
3

ToggleButton support ICommand, donc je crée beaucoup de commandes telles que TogglePlayPause, ToggleMute et ça marche bien mais j'ai besoin de lier aussi la propriété IsChecked pour que son état vérifié affiche toujours l'état correct. mais quand je crée le mode de liaison de OneWay pour ToggleButton et quand j'appuie sur ToggleButton, la liaison sera perdue.Pourquoi la liaison OneWay à la propriété ToggleButton IsChecked n'a pas pu être effectuée?

La question est pourquoi ToggleButton supporte ICommand mais ne supporte pas la liaison OneWay? Je peux définir la liaison TwoWay, mais ce n'est pas une bonne idée lorsque ToggleButton utilise Command, car l'opération en cours est commandée par Command et ne doit pas être dupliquée avec TwoWay, parfois aussi impossible. dans mon cas Command = TogglePlayPause IsChecked = {Lier à IsMediaPlaying} IsMediaPlaying doit être en lecture seule.

Alors s'il vous plaît dites-moi comment utiliser ToggleButton avec Command et lier sa propriété IsChecked?

Répondre

3

Vous pouvez écrire votre propre OneWayToggleButton en dérivant de ToggleButton et remplacer ce qui se passe lorsque le bouton est cliqué:

public class OneWayToggleButton : ToggleButton 
{ 
    protected override void OnClick() 
    { 
     RaiseEvent(new RoutedEventArgs(ClickEvent, this)); 
     if (Command != null && Command.CanExecute(CommandParameter)) 
      Command.Execute(CommandParameter); 
    } 
} 

et IsChecked ne sera pas modifié par le bouton lui-même et ne peut être changé par le contraignant. Mais comme nous utilisons toujours la propriété IsChecked du ToggleButton, le contrôle se comportera et se comportera normalement.

+0

Je ne peux pas utiliser cela, parce que les interfaces créées par d'autres personnes et j'ai juste sa DLL. Je fais de la liaison dynamique avec du code, donc je ne peux pas utiliser ma propre classe de remplacement. – Madnik7G

+0

Ensuite, effectuez une liaison bidirectionnelle avec votre propre propriété intermédiaire et redéfinissez-la à sa valeur correcte lorsqu'elle est modifiée par la liaison. –

+0

En fait, j'applique déjà la liaison bidirectionnelle avec l'évaluateur d'ensemble non vide, mais cela ne semble pas une bonne solution, bien sûr cela fonctionne mais je devrais changer toutes mes propriétés readonly de framework juste pour ToggleButton. Je pense que l'équipe Silverlight devrait résoudre ce problème s'il n'y a pas d'autre solution. – Madnik7G

Questions connexes