2009-03-17 6 views
12

Ich habe eine benutzerdefinierte Klasse Foo mit Eigenschaften A und B. Ich möchte es in einer Databinding-Steuerelement anzeigen.Wie kann ich Änderungen an den Elementeigenschaften in der BindingList <T> erkennen?

Ich habe eine Klasse Foos : BindingList<Foo> erstellt.

Um einige interne Eigenschaften der Foos-Klasse zu aktualisieren, muss ich über Eigenschaftenänderungen informiert werden (ich kann Einfügungen, Umzüge usw. handhaben) auf den Elementen in der Liste. Wie würden Sie diese Funktionalität implementieren?

Sollte ich Foo von einem Objekt in dem Framework erben, das das unterstützt? Ich denke, ich könnte Ereignisse erstellen, die mich über Änderungen informieren, aber ist das so, wie es gemacht werden sollte? Oder gibt es ein Muster im Rahmen, das mir helfen würde?

Antwort

19

Foo sollte die Schnittstellen INotifyPropertyChanged und INotifyPropertyChanging implementieren.

public void Foo : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    private int _someValue; 
    public int SomeValue 
    { 
     get { return _someValue; } 
     set { _someValue = value; NotifyPropertyChanged("SomeValue"); } 
    } 
} 

Die Binding sollten Sie setzen Ihre Klasse ruft Handler das Property Ereignis automatisch und Ihre GUI sollte aktualisieren whever jetzt auf Ihren Event-Handler Haken.

[Bearbeiten hinzuzufügen:] Zusätzlich wird die Binding Klasse exposted two events, die Sie benachrichtigen, wenn die Sammlung oder geändert wurde hinzugefügt:

public void DoSomething() 
{ 
    BindingList<Foo> foos = getBindingList(); 
    foos.ListChanged += HandleFooChanged; 
} 

void HandleFooChanged(object sender, ListChangedEventArgs e) 
{ 
    MessageBox.Show(e.ListChangedType.ToString()); 
} 
+0

Testing ... Ich denke, es ist das, was ich suche. –

+0

Welches Ereignis in der Foos-Klasse fängt die PropertyChanged-Handler des Feuers? Denken Sie daran, ich brauche etwas Arbeit in der Foos-Klasse (im Grunde einige interne Wörterbücher überarbeitet). –

+0

Sagen wir, Ihre Foo-Klasse wurde genauso implementiert wie oben gezeigt. Wenn eine Klasse die Foo.SomeValue-Eigenschaft festlegt, löst die Foo-Instanz den PropertyChanged-Ereignishandler aus. Sie können (falls Sie dies wünschen) den Event-Handler direkt in der Foo-Instanz oder über BindingList.ListChanged aufrufen. – Juliet

Verwandte Themen