none
2 Observable Collection in einem Datagrid RRS feed

  • Frage

  • Hallo,

    Ich suche eine Möglichkeit 2 "unterschiedliche" ObservableCollection in einem Datagrid zusammenzufügen:

    ObsverableCollection<Data A> Obs A

    ObservableCollection<Data B> Obs B

    DataA:

    ID,

    DatentypA NameA

    DataB,

    ID 

    DatentypB NameB

    Im Datagrid sollen die selben Id's stehen

    Id0 NameA0 NameB0

    Id1 NameA0 NameB0

    .........

    Und sobald ich eine Zeile hinzufüge sollen die einzelnen Collection upgedatet werden...

    Dienstag, 24. Juni 2014 18:03

Antworten

  • Hallo,

    als Datenquelle für ein DataGrid (oder andere) braucht Du eine Auflistung bzw. ICollectionView, siehe u. a.
    http://stackoverflow.com/questions/6317860/should-i-bind-to-icollectionview-or-observablecollection

    Am sinnvollsten solltest Du die Trennung ganz fallen lassen und eine Klasse erstellen, die alle benötigten Eigenschaften enthält. Das spart eine Menge Handstände, um die Datenquellen zu synchronisieren und Operationen wie Anfügen, Aktualisierungen Löschen können "natürlich" ablaufen.

    Brauchst Du die Daten anderweitig getrennt, so ist das einfacher zu realisieren, in dem Du die Klasse als Teilmenge auf zwei weitere Auflistungen (die dann DataA/B entsprechen) aufteilst.

    Der umgekehrt Weg wäre hingegen deutlich "stressiger", da Du eine Komponenten Klasse erstellen müsstest, diese in eine Auflistung packen und die jeweils mit den Quellen (DataA, DataB) synchronisieren.

    Gruß Elmar

    • Als Antwort markiert Hartl_D Dienstag, 1. Juli 2014 12:44
    Dienstag, 24. Juni 2014 18:54
  • Hallo,

    hilfreich wäre es zu wissen, wieso Du die beiden anderen Klassen benötigst?

    Für eine Synchronisierung wäre wie gestern schon angedeutet, etwas mehr Code notwendig, je nachdem wie zeitnah die Geschichte sein muss.

    Eine ObservableCollection implementiert die INotifyCollectionChanged-Schnittstelle womit man Änderungen an andere Auflistungen weiterreichen kann. Deine kombinierte Datenklasse sollte zudem INotifyPropertyChanged implementieren, damit Änderungen der Eigenschaften weitergereicht werden können, siehe z. B.: http://stackoverflow.com/questions/2139028/how-to-keep-collections-of-viewmodels-and-models-in-sync

    Gruß Elmar

    • Als Antwort markiert Hartl_D Dienstag, 1. Juli 2014 12:44
    Mittwoch, 25. Juni 2014 08:55

Alle Antworten

  • Hallo,

    als Datenquelle für ein DataGrid (oder andere) braucht Du eine Auflistung bzw. ICollectionView, siehe u. a.
    http://stackoverflow.com/questions/6317860/should-i-bind-to-icollectionview-or-observablecollection

    Am sinnvollsten solltest Du die Trennung ganz fallen lassen und eine Klasse erstellen, die alle benötigten Eigenschaften enthält. Das spart eine Menge Handstände, um die Datenquellen zu synchronisieren und Operationen wie Anfügen, Aktualisierungen Löschen können "natürlich" ablaufen.

    Brauchst Du die Daten anderweitig getrennt, so ist das einfacher zu realisieren, in dem Du die Klasse als Teilmenge auf zwei weitere Auflistungen (die dann DataA/B entsprechen) aufteilst.

    Der umgekehrt Weg wäre hingegen deutlich "stressiger", da Du eine Komponenten Klasse erstellen müsstest, diese in eine Auflistung packen und die jeweils mit den Quellen (DataA, DataB) synchronisieren.

    Gruß Elmar

    • Als Antwort markiert Hartl_D Dienstag, 1. Juli 2014 12:44
    Dienstag, 24. Juni 2014 18:54
  • Hallo,

    danke für die Antwort, so eine Lösung hab ich mir schon gedacht. Eine Gesamtklasse als Observable Collection welche die Referenz auf DataA und DataB beinhaltet. Da ich aber die beiden getrennten ObservableCollection brauche hab ich noch keine Idee für eine "funktionierende" Synchronisierung.

    Data C = Data A+ Data B

    Bei einer Änderung von A oder b soll C aktualisiert werden.

    Bei einer Änderung von C sollen A und B aktualisiert werden...

    Dienstag, 24. Juni 2014 19:02
  • Hallo,

    hilfreich wäre es zu wissen, wieso Du die beiden anderen Klassen benötigst?

    Für eine Synchronisierung wäre wie gestern schon angedeutet, etwas mehr Code notwendig, je nachdem wie zeitnah die Geschichte sein muss.

    Eine ObservableCollection implementiert die INotifyCollectionChanged-Schnittstelle womit man Änderungen an andere Auflistungen weiterreichen kann. Deine kombinierte Datenklasse sollte zudem INotifyPropertyChanged implementieren, damit Änderungen der Eigenschaften weitergereicht werden können, siehe z. B.: http://stackoverflow.com/questions/2139028/how-to-keep-collections-of-viewmodels-and-models-in-sync

    Gruß Elmar

    • Als Antwort markiert Hartl_D Dienstag, 1. Juli 2014 12:44
    Mittwoch, 25. Juni 2014 08:55