Announcement

Collapse
No announcement yet.

INotifyPropertyChanged und BindingSource - kein Update

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • INotifyPropertyChanged und BindingSource - kein Update

    Hallo zusammen,

    Für meine Anzeigeobjekte habe ich ein Interface definiert, welches das Interface INotifyPropertyChanged erweitert.
    Die Anzeigeobjekte kapseln die Domain Objekte und stellen Properties zur Verfügung über die die Eigenschaften des Domain Objekts angezeigt/verändert werden können. Ausserdem leitet das Anzeigeobjekt das PropertyChanged Event vom Domain Object an die Oberfläche weiter.

    Wenn ich nun eine BindingSource mit den Anzeigeobjekten fülle, dann werden diese korrekt dargestellt. Allerdings reagiert die BindingSource nicht auf das PropertyChanged Event der INotifyPropertyChanged Schnittstelle. Das Event würde aufgerufen werden, jedoch hat sich die BindingSource nicht als Listener für das Event registriert.
    Das Feld (z.B. im Grid) wird nur geupdatet, wenn ich es entweder anklicke oder explizit per ResetItem/ResetBindings auffrische.

    Hat jemand eine Idee woran das liegen könnte?

    Zur Not muss ich eben ResetBindings/ResetItem aufrufen, allerdings möchte ich das vermeiden, da ich mir vorstellen könnte, dass es bei vielen Items ziemlich langsam wird.

    Vielen Dank schon mal!!!

    Gruß
    Fanderlf

    Update: Der Mechanismus funktioniert, wenn das geupdatete Element gerade ausgewählt ist. Hinzufügen möchte ich noch, dass ich die Änderungen nicht im Grid direkt, sonder direkt man Domain Objekt vornehme. Diese Änderung soll über das PropertyChanged Event auch im Gitter landen.
    Zuletzt editiert von fanderlf; 16.03.2010, 18:04.

  • #2
    Was für eine Liste bindest du den an die BindingSource?. Das ganze sollte eigentlich nur klappen wenn du eine BindingList<T> nimmst.

    Das Grid bzw die BindingSource reagiert nur beim aktuellen Datensatz auf PropertyChanged da diese Events nur für das Current Object verdrahtet werden. Damit auf sonstige Änderungen reagiert wird brauchst du einen ListChanged. Und eine Bindinglist macht eben aus PropertyChanged ein ListChanged. Wenn du eine eigene Listklasse verwendest musst du selbst das IRaiseItemChangedEvents Interface implementieren (hab ich noch nicht gemacht, keine Ahnung ob das schwer ist).

    Comment


    • #3
      Ah so... Ich hab nur eine ganze normale ObjectBindingSource verwendet. Die einzelnen Items direkt eingekippt.
      Macht die BindingList<T> automatisch aus dem PropertyChanged ein ListChanged? Dann wäre das ja relativ einfach zu implementieren. Ich werde das gleich mal versuchen.

      Edit: Ok, hat funktioniert! Vielen Dank. Hab meine Elemente in eine BindingList<T> gepackt und diese der BindingSource übergeben. Ein weiterer Vorteil den ich entdeckt habe ist, dass BindingList<T> auch das hinzufügen und entfernen von Elementen automatisch in Events umwandelt. Das habe ich bisher auch manuell gemacht
      Zuletzt editiert von fanderlf; 17.03.2010, 11:03.

      Comment

      Working...
      X