2012-04-03 13 views
2

Newbie Frage.Erzeuge Ereignis, wenn Variable ändert, um von einer Code-Klasse zu senden, um Klasse c zu bilden #

Ich habe zwei C# -Klassen - eine Code-Klasse (zB CodeClass) und eine Form-Klasse (zB FormClass). In CodeClass habe ich eine Reihe von Funktionen, mit denen ich eine Zeichenfolge innerhalb der Klasse regelmäßig aktualisieren kann (ich kann eine Eigenschaft oder was auch immer verwenden). Ich möchte eine Möglichkeit, andere Klassen zu benachrichtigen, wenn sich dieser Zeichenfolgenwert ändert. d. h., ich versuche, FormClass zu subskribieren, um Ereignisse in einer String-Nachricht zu ändern und dann den Wert in ein Textfeld oder ähnliches zu drucken. Irgendwann in der Zukunft, muss ich API-Funktionen von CodeClass bereitstellen - also im Grunde brauche ich eine Möglichkeit, jede abonnierende Klasse von Änderungen in der String-Nachricht zu benachrichtigen (String-Nachricht nicht erhalten überall außerhalb CodeClass geändert - es passiert innerhalb von Funktionen in CodeClass). Ich habe mit Ereignissen und Delegaten usw. versucht, aber diese scheinen alle von einer externen Klasse implementiert zu werden, die die String-Nachricht (Eigenschaft) modifiziert.

Grüße, etc

+0

Randnotiz, wenn Sie dies tun möchten, um Steuerelemente basierend auf den Eigenschaften eines Objekts zu aktualisieren, gibt es DataBinding-Steuerelemente, die all das für Sie erledigt, ohne viel Code hinzuzufügen! – Alexandre

Antwort

5

Sie müssen die INotifyPropertyChanged Schnittstelle implementieren:

codeClass.PropertyChanged += codeClass_PropertyChanged; 

... 

void codeClass_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName = "MyProperty") 
    { 
     ... 
    } 
} 
+0

Ausgezeichnet, das funktioniert perfekt - vielen Dank :) – ftl25

0

Erstellen Sie einfach ein Ereignis:

class CodeClass : INotifyPropertyChanged 
{ 

    private string _myProperty; 
    public string MyProperty 
    { 
     get { return _myProperty; } 
     set 
     { 
      _myProperty = value; 
      OnPropertyChanged("MyProperty"); 
     } 
    } 

    #region INotifyPropertyChanged implementation 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
     handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    #endregion 

} 

In FormClass, können Sie auf die PropertyChanged Veranstaltung wie diese abonnieren und feuern dieses Ereignis, wenn sich die Zeichenfolge ändert.

public class CodeClass 
{ 
    private string _someString; 
    public string SomeString 
    { 
     get { return _someString; } 
     set 
     { 
      _someString = value; 
      if (SomeStringChanged != null) { SomeStringChanged(value) } 
     } 
    } 
    public event Action<string> SomeStringChanged; 
} 

Hinweis: Es gibt einen Standard-Weg, dies, die INotifyPropertyChanged-Schnittstelle zu tun, wie die andere Antwort verwendet. Dies wird hauptsächlich in WPF und Silverlight verwendet, aber es gibt keinen Grund, warum Sie es nicht in Windows Forms verwenden könnten.