2012-04-25 6 views
1

J'écris une application WPF et j'aimerais utiliser une variable Enum for a State. Exemple: Lorsque le programme démarre, certaines commandes sont désactivées jusqu'à ce que l'état change.Enum Changed Event

Lorsque l'état change, je voudrais désactiver/activer une variété de contrôles via un gestionnaire d'événements. J'ai écrit beaucoup de gestionnaires d'événements personnalisés dans le passé, cependant, en utilisant une énumération comme le déclencheur a réussi à me faire exploser l'esprit.

Des suggestions?

Répondre

2

Si vous utilisez une approche MVVM, je suis d'accord avec Daniel White sur le fait que vous devez implémenter INotifyPropertyChanged. Vous devez lier le membre IsEnabled de vos contrôles à une propriété de votre ViewModel.

code:

public class ViewModel : INotifyPropertyChanged 
{ 
     public MyEnum EnumValue 
     { 
      get { return enumValue; } 
      set { 
       enumValue = value; 
       AreControlsEnabled = enumValue == MyEnum.SomeValue; 
      } 
     } 

     public bool AreControlsEnabled 
     { 
      get { return areControlsEnabled; } 
      set { 
       areControlsEnabled = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArg("AreControlsEnabled"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
} 

XAML:

<TextBox IsEnabled="{Binding AreControlsEnabled}"/> 
+0

En fonction de la complexité de l'application, je pense que je vais simplement coder quelques méthodes pour basculer les commandes. Loin d'être élégant, mais ne vaut pas le niveau d'abstraction de MVVM ou de modèles de conception similaires. Merci! – Ritz

+2

@Ritz Attention au piège "mon application est trop simple pour MVVM"! Les applications deviennent de plus en plus complexes à mesure que les spécifications changent et, lorsque cela se produit, plus tôt MVVM est en place, mieux c'est. Même pour les applications les plus basiques, il n'y a pas de réel surcoût pour une implémentation MVVM basique et cela simplifie la structure globale de votre application et vous permettra d'aller de l'avant. – Ricibob

+0

+1 à cela. Je trouve que XAML l'exige presque. –

3

Vous devez implémenter INotifyPropertyChanged dans votre modèle de vue et appeler l'événement lorsque la valeur a changé.

+0

J'espérais avoir des choses abstraites que loin. C'est une implémentation relativement simple. Si aucune autre option n'est suggérée, je dois = D – Ritz