2011-08-27 2 views
3

Je suis tombé sur un problème intéressant.Comment changer ToggleButton de ViewModel?

Résumé: Je ne peux pas modifier l'état d'un bouton bascule du ViewModel. Le même problème semble être avec Microsoft ToggleButton ainsi que Telerik Controls.

ViewModel:

private bool? _isToggleChecked; 
public bool? IsToggleChecked 
{ 
    get { return _isToggleChecked; } 
    set 
    { 
     if(_isToggleChecked == value) 
      return; 
     _isToggleChecked = value; 
     RaisePropertyChanged(()=>IsToggleChecked); 
    } 
} 

public VM() 
{ 
    FireCommand = new DelegateCommand(OnFire); 
} 

private void OnFire() 
{ 
    if (IsToggleChecked == null) 
    { 
     IsToggleChecked = true; 
     return; 
    } 

    IsToggleChecked = !IsToggleChecked; 
} 

public DelegateCommand FireCommand { get; set; } 

Voir: (Microsoft ToggleButton pourrait être utilisé à la place avec le même comportement)

<Grid x:Name="LayoutRoot" Background="White"> 
    <StackPanel> 
     <telerik:RadToggleButton Height="50" IsChecked="{Binding IsToggleChecked}" /> 
     <Button Command="{Binding FireCommand}" Height="20" /> 
    </StackPanel>   
</Grid> 

Afficher le code Derrière:

public MainPage() 
{ 
    InitializeComponent(); 
    DataContext = new VM(); 
} 

Comment est-ce possible? Comment puis-je changer l'état de bascule programmatique?

Merci beaucoup,

+1

avez-vous essayé de ne pas utiliser la propriété Nullable? – Tigran

+0

Merci, ça marche maintenant. :) S'il vous plaît mettez ceci en réponse et je le marque comme répondu. – Houman

Répondre

1

Pour moi, c'est un problème de propriété Nullable, que le contrôle telerik ne supporte pas pour une raison quelconque. Si c'est le cas, vérifiez sur le site du fournisseur les solutions/packs de services disponibles ou faites simplement votre propriété NONNullable et refactorisez votre code.

Cordialement.

2

J'ai eu un problème avec la liaison IsChecked sur un RadRibbonToggleButton lorsque le bouton était lié à une commande.

La solution que j'ai trouvé était d'utiliser deux de manière contraignante, mais empêcher la mise à jour de la liaison de la source à l'aide UpdateSourceTrigger = Explicite

IsChecked="{Binding IsLocked, Mode=TwoWay, UpdateSourceTrigger=Explicit}" 

Cela fonctionne pour moi.

Il est décrit comme un problème connu dans WPF here

Questions connexes