2009-07-06 7 views
0

je suit classeComment créer un gestionnaire d'événements pour ma classe

public class ButtonChange 
{ 
    private int _buttonState; 
    public void SetButtonState(int state) 
    { 
      _buttonState = state; 
    } 
} 

Je veux déclencher un événement à chaque fois que _buttonState changements de valeur, finaly je veux définir un gestionnaire d'événements dans ButtonChange

Voulez-vous les gars aidez-moi s'il vous plaît ??

P.S: Je ne veux pas utiliser INotifyPropertyChanged

Répondre

7

Que diriez-vous:

public class ButtonChange 
{ 
    // Starting off with an empty handler avoids pesky null checks 
    public event EventHandler StateChanged = delegate {}; 

    private int _buttonState; 

    // Do you really want a setter method instead of a property? 
    public void SetButtonState(int state) 
    { 
     if (_buttonState == state) 
     { 
      return; 
     } 
     _buttonState = state; 
     StateChanged(this, EventArgs.Empty); 
    } 
} 

Si vous voulez que le gestionnaire d'événements StateChanged connaître le nouvel état, vous pouvez obtenir votre propre classe à partir de EventArgs, par exemple ButtonStateEventArgs, puis utilisez un type d'événement de EventHandler<ButtonStateEventArgs>.

Notez que cette implémentation n'essaie pas d'être thread-safe.

+0

Belle façon d'éviter les chèques nuls satanés. Je n'ai pas pensé à faire ça. Je ne sais pas pourquoi. Probablement des habitudes robotiques automatiques. – tzup

+0

Merci beaucoup Jon, pour l'événement StateChanged je n'ai pas assigné de gestionnaire vide, mais cela a fonctionné, est-ce nécessaire, pourriez-vous m'expliquer un peu plus à ce sujet? –

+0

Si vous n'avez pas le bit "= delegate {}", alors si personne ne s'abonne à l'événement mais que vous essayez de l'élever de toute façon, vous obtiendrez une exception NullReferenceException. –

0

Aidez-vous avec google "C# événements msdn"

Events tutorial (C#) - MSDN si vous utilisez simplement C#. INotifyPropertyChanged est pour WPF - vous n'avez pas besoin pour POCO/simples événements de type

+0

INotifyPropertyChanged est pas seulement pour WPF, il est utilisé pour informer les clients, les clients liant généralement, qu'une valeur de la propriété a changé (MSDN) http: // msdn. microsoft.com/fr-fr/library/system.componentmodel.inotifypropertychanged.aspx –

+0

techniquement, il peut être utilisé .. cependant, c'est une pierre angulaire de la liaison de données WPF; Personnellement, je n'ai pas entendu parler de cette interface avant l'arrivée de WPF. – Gishu

1

collecte d'événements basée sur la propriété:

public class ButtonChange 
{ 
    private int _buttonState; 
    public int ButtonState 
    { 
     get { return _buttonState; } 
     set 
     { 
      if (_buttonState == value) 
       return; 
      _buttonState = value; 

     } 
    } 

    public event EventHandler ButtonStateChanged; 
    private void OnButtonStateChanged() 
    { 
     if (this.ButtonStateChanged != null) 
      this.ButtonStateChanged(this, new EventArgs()); 
    } 
} 
Questions connexes