WPF ToggleButton IsChecked liaison problème
Je suis en train de créer une situation où un seul ou aucun d'un regroupement de deux ToggleButton
s peut être à tout moment. Le problème que j'ai est que si je modifie l'état de la sauvegarde des variables de l'INTERFACE utilisateur de l'état ne met pas à jour.
J'ai INotifyPropertyChanged
mis en œuvre.
J'ai créé mon ToggleButton
s comme ceci:
<ToggleButton IsChecked="{Binding Path=IsPermanentFailureState, Mode=TwoWay}"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center">
<TextBlock TextWrapping="Wrap"
TextAlignment="Center">Permanent Failure</TextBlock>
</ToggleButton>
<ToggleButton IsChecked="{Binding Path=IsTransitoryFailureState, Mode=TwoWay}"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center">
<TextBlock TextWrapping="Wrap"
TextAlignment="Center">Temporary Failure</TextBlock>
</ToggleButton>
C'est ma sauvegarde de propriétés (je suis en utilisant le pattern MVVM, les autres liaisons de travail, c'est à dire en cliquant sur le ToggleButton
fait entrer ces paramètres de propriété. Quand je suis à la modification de l'état via le code, les Boutons de Bascule ne change pas l'état visuel. IE je suis réglage de la sauvegarde de la propriété à false, mais le bouton reste cochée.
public bool? IsPermanentFailureState
{
get { return isPermFailure; }
set
{
if (isPermFailure != value.Value)
{
NotifyPropertyChanged("IsPermanentFailureState");
}
isPermFailure = value.Value;
if (isPermFailure) IsTransitoryFailureState = false;
}
}
public bool? IsTransitoryFailureState
{
get { return isTransitoryFailureState; }
set
{
if (isTransitoryFailureState != value.Value)
{
NotifyPropertyChanged("IsTransitoryFailureState");
}
isTransitoryFailureState = value.Value;
if (isTransitoryFailureState) IsPermanentFailureState = false;
}
}
OriginalL'auteur Pieter Breed | 2009-09-04
Vous devez vous connecter pour publier un commentaire.
Le problème est juste que vous êtes à la levée de la notification de modification de propriété avant la modification de la valeur de la propriété. Par conséquent, WPF lit le vieux de la valeur de la propriété, et non la nouvelle. Changement:
D'ailleurs, vous dire que cela fonctionne lorsque vous utilisez l'interface plutôt que de code, mais je ne vois pas ce qu'il pouvait.
wow ... je ne suis pas censé être aussi stupide! C'est probablement ce qui se passe quand vous vous asseyez et le code lui seul tout le temps. Merci!
OriginalL'auteur Kent Boogaart
Votre code est faux: vous êtes à la notification de changement avant que vous l'avez fait. Je pense que vous avez besoin de déplacer votre
isPermFailure = valeur.Valeur;
à l'intérieur:
et de même pour l'autre.
Je pense que vous aurez envie de passer de l'autre exposé, trop:
sinon, vous serez réglage de l'etat et de la notification de celle-là, inutilement.
Vous avez tout à fait raison: la choix de mots, mais je pense toujours que la mienne est la meilleure réponse. 🙂
OriginalL'auteur serialhobbyist