.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

Letzter Beitrag 08-08-2008 7:48 von Norbert Eder. 6 Antworten.
Seite 1 von 1 (7 Treffer)
Beiträge sortieren: Zurück Weiter
  • 07-22-2008 15:15

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Hallo!

    Wie hier auch schon in Norberts Beispielen beschrieben, braucht man für ein TreeView Klassen, die eine Property vom Typ Collection mit Daten der untergeordneten Klasse haben.

    Ich habe jetzt Parent-, Child- und Grandchild-Klassen, deren Daten über Pages hinzugefügt und geändert werden. Für die hierarchische Anzeige in einem Treeview habe ich Klassen, die mit den Daten der Originalklassen gefüllt werden und z.B. eine Property „ParentName“ und eine Collection-Property aus Children enthalten.

    Den Treeview benutze ich zur Navigation (funktioniert alles prima).
    Problem: beim Ändern und hinzufügen von Daten würde ich natürlich sehr gerne den Treeview sofort aktualisieren. Momentan wird nur der Name auf der untersten Stufe aktualisiert, weil die Collection aus Grandchildren Elemente der Originalklasse „Grandchildren“ enthält, und diese über INotifyPropertyChanged mitteilt, dass der Name geändert wurde.

    Ein Hinzufügen von Einträgen wird schon nicht mehr registriert, leuchtet mir auch irgendwie ein.

    Bin bisher hier gestrandet:
    http://blogs.msdn.com/wpfsdk/archive/2007/03/21/wha-happened-part-two-more-property-changes-in-wpf.aspx

    Vielleicht habe ich ja etwas einfaches übersehen und es geht ganz leicht. Bin fast schon so weit, die Navigation nur dann so zu benutzen, wenn die Bearbeitung der Daten abgeschlossen ist.


    Für Antworten vielen Dank im Voraus!

    Andreas

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-23-2008 19:29 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 502
    • Punkte 7.469
    • ForumsAdministrator

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Von welchem Typ sind deine Collections? ObservableCollection? Wenn ja, dann sollte das funktionieren. Es könnte aber natürlich sein, dass du nichts siehst, da beim Erstellen eines neuen Objektes, die Eigenschaft (welche im TreeView dann für das Item angezeigt wird) nicht auf einen Default-Wert gesetzt wird. In diesem Fall würde das Item zwar vorhanden sein, allerdings wird es mit der Höhe 0 hinausgerendert. D.h. wenn der Name angezeigt wird, hier einen Default-Wert beim Anlegen setzen und das neue Element gleich zum Bearbeiten in eine View stecken.

    Sind deine Collections nicht von besagtem Typ, dann liegt vermutlich hier das Problem.

    PS: Ich hab mir das verlinkte Beispiel jetzt nicht angesehen, da der von mir geschilderte Fall zu 80% zu trifft. Ist dem nicht so, mich bitte verpeitschen und darauf hinweisen Wink

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-27-2008 23:25 Antwort zu

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Norbert, danke für die Antwort. Ja, ich benutze ObservableCollection. Und vom “Verpeitschen” wird hiermit ausdrücklich Abstand genommen!

    Ich habe das Gefühl, dass ich mir wirklich mal ein einfaches Beispiel erstellen muss, dass tatsächlich Eltern, Kinder und Enkel benutzt.

    Die Aktualisierung scheitert wie schon gesagt bereits auf der untersten Ebene des TreeView.
    Aber vielleicht kommt der Weg zur Erleuchtung ja mit der Lösung dieses Problems.

    Hier ein Ausschnitt aus der Klasse, die ich für die unterste Ebene des TreeView benutze (im Original heissen die Eigenschaften und Klassen alle anders, habe etwas manipuliert).
    Es gibt die Eigenschaften ChildName, ChildID und eben die Eigenschaft „CollectionGrandchildren“.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    private Data.cCollectionGrandchildren _collectionGrandchildren =
    Data.cCollectionGrandchildren.LadeInstanz();

    public ObservableCollection<Data.cGrandchildren> CollectionGrandchildren
    {
    get
    {
    //return _collectionArbeitsschritte.CollArbeitsschritte;

    myC = new ObservableCollection<Data.cGrandchildren>();

    foreach (Data.cGrandchildren item in _collectionGrandchildren.CollGrandchildren)
    {
    if (item.ChildID ==_ChildID)
    myC.Add(item);
    }
    return myC;
    }

    set {
    // setter wird eigentlich nicht benutzt
    CollectionGrandchildren = value;
    OnPropertyChanged(new PropertyChangedEventArgs("CollectionGrandchildren"));
    }
    }
    }

    So wird alles zumindest richtig angezeigt. Ändere ich die Namen der Enkelkinder in meiner Page, die mit cCollectionGrandchildren interagiert, wird das gleich ins Treeview übernommen. Wenn ein Enkelkind jedoch in der Page hinzugefügt wird, wird das ignoriert.

    Gebe ich jedoch die ungefilterte Collection zurück (auskommentierter Teil, anstatt des Teils mit myC), werden auch neue Enkelkinder sofort angezeigt.
    Gruß, Andreas

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-28-2008 7:48 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 502
    • Punkte 7.469
    • ForumsAdministrator

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Ich gehe davon aus, dass die Aktualisierung beim Hinzufügen eines neuen Elementes nicht funktioniert, da die Collection bei jedem Zugriff darauf neu angelegt wird. Versuche das Instanzieren bei jedem get-Aufruf zu vermeiden.

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 07-28-2008 11:15 Antwort zu

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Aaahh, danke, das klingt gut. Sobald ich etwas Zeit finde, werde ich es versuchen und berichten!
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 08-07-2008 17:32 Antwort zu

    • Andreas
    • Top 50 Mitwirkender
      Männlich
    • Registriert am 07-15-2008
    • Berlin
    • Beiträge 7
    • Punkte 125

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Also statisch funktioniert es auch nicht.
    Das Problem scheint mir eher zu sein, dass das get eben nur einmal aufgerufen wird.
    Ich weiss jetzt gar nicht mehr, ob ich es schon einmal manuell versucht habe, indem ich bei einer Änderung der Ausgangsklassen den View, an den der TreeView gebunden ist, aktualisiere.
    Aber vielleicht würde mir das TreeView dann zusammenklappen (...das arme Ding!).
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 08-08-2008 7:48 Antwort zu

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 502
    • Punkte 7.469
    • ForumsAdministrator

    AW: TreeView - Aktualisieren bei Änderung der Collection-Eigenschaft

    Jetzt ist doch ein wenig Zeit inzwischen vergangen. Wie sieht dein Code denn jetzt aus?
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (7 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions