ObservableCollection Refresh



  • Hallo

    Habe eine ObservableCollection deren Member wieder eine ObservableCollection beinhaltet. Ändert sich nun der Inhalt der verschachtelten ObservableCollection wird die View nicht upgedatet.

    Gibts da einen Grud dafür und vor allem eine Lösung?



  • Geratener Grund: Eine ObservableCollection prüft bei Referenztypen als Element, ob sich die Referenz eines Elements geändert hat, um auf "changed" zu reagieren. Wenn sich die verschachtelte Collection ändert, bleibt aber die Referenz gleich. Lösung kenne ich keine, außer "Write your own collection".



  • Sprich wenn ich nun einen Referenztypen in meiner ObservableCollection habe, der wiederum zB. einen Integer Wert beinhaltet und diesen verändere erhalte ich auch keine Nachricht dass sich das Element geändert hat?

    Das heißt ich muss irgendwie das PropertyChanged dieses Integer Wertes nach "oben" durchreichen.

    Wie löst man das. Du schreibst ja "write your own collection". Schön aber was muss ich darin machen?



  • OrginellerName schrieb:

    Sprich wenn ich nun einen Referenztypen in meiner ObservableCollection habe, der wiederum zB. einen Integer Wert beinhaltet und diesen verändere erhalte ich auch keine Nachricht dass sich das Element geändert hat?

    Wenn meine Vermutung korrekt ist, ja. Aber du kannst dich ja mal schlau machen, wie es wirklich ist. Ich habe nur geraten, aber viel anders kann es eigentlich nicht funktionieren.

    Wie löst man das. Du schreibst ja "write your own collection". Schön aber was muss ich darin machen?

    Du musst im Prinzip eine Collection schreiben, die speziell darauf ausgerichtet ist, weitere ObservableCollections zu verwalten und auf deren Events zu reagieren.



  • Kannst du mal zeigen wie genau du die Collections in der View bindest? Ich wüsste keinen guen Grund warum das nicht korrekt klappen sollte.



  • Ist etwas komplizierter.

    Meine OberservableCollection ist an mehrere Comboboxen gebunden.
    Das Element der ObservableCollection ist wie folgt aufgebaut.

    class MyItem
    {
    public int ID { get; set; }
    public string Name { get; set; }

    ObservableCollection<Address> UsedAddresses.
    }

    Die Klasse "Address" ist gewissermassen die Codierung der Combobox, nicht direkt der Combobox aber des ViewModels das dahinster steht.

    Wenn nun das Item in einer Combobox ausgewählt wird, wird die "Adresse" dieser ComboBox in die Collection UsedAddresses eingetragen.

    So weit geht alles gut.

    Nun sollte aber die Anzeige der restlichen Comboboxen aktualisiert werden.
    In einer Combobox wird zum einen der Name des Items angezeigt und zum anderen die Collection UsedAddresses. Also die Information wo bisher der Wert überall ausgewählt ist. Was nur einmal beim Start passiert danach nicht mehr.



  • Dass es etwas komplizierter ist habe ich mir gedacht, denn aller Wahrscheinlichkeit nach sind hier nicht die ObservableCollections das Problem. So ganz verstanden welche Combobox welchen DataContext hat, habe ich noch nicht, kannst du das auf ein Minimalbeispiel runterbrechen bei dem du den Fehler auch noch hast? Optimalerweise mit Copy & Paste, denn mit Sicherheit wird deine Klasse keine Zeile:

    ObservableCollection<Address> UsedAddresses.
    

    haben.


Anmelden zum Antworten