WPF-TreeView, das an ObservableCollection gebunden ist und keine Root-Knoten aktualisiert

8

Entschuldigung - meine Frage ist fast identisch mit dieser aber Da es keine tragfähige Antwort erhalten hat, hoffe ich, dass jemand anderes frische Ideen hat.

Ich habe eine WPF-TreeView, die an eine Hierarchie eines einzigen Typs gebunden ist:

%Vor%

Die Entity-Klasse implementiert INotifyPropertyChanged, aber ich habe diesen Code aus Gründen der Übersichtlichkeit weggelassen.

Die TreeView ist an eine ObservableCollection & lt; Entity & gt; und jede Entity-Instanz legt eine Gruppe von enthaltenen Entity-Instanzen über ihre Children-Eigenschaft offen:

%Vor%

Anfangs bindet das TreeView wie erwartet und zeigt eine mehrstufige Hierarchie korrekt an. Wenn die Mitgliedschaft einer der Children-Auflistungen programmgesteuert geändert wird, werden die Änderungen in der TreeView korrekt widergespiegelt.

Änderungen an der Mitgliedschaft der Root-Mitgliedsebene ObservableCollection & lt; Entity & gt; werden nicht in der TreeView reflektiert.

Irgendwelche Vorschläge würden geschätzt.

Danke, Tim

    
Tim Coulter 26.01.2010, 08:47
quelle

2 Antworten

20

Meine erste Vermutung ist, dass Sie für den Wurzelknoten etwa Folgendes haben:

%Vor%

Dann, anstatt etwas [gut] wie das folgende zu tun:

%Vor%

Sie tun etwas [schlecht] so:

%Vor%

Sie sollten in der Lage sein, das Problem aufzuspüren, indem Sie das Hintergrundfeld der Entities-Eigenschaft readonly :

erstellen %Vor%     
Sam Harwell 26.01.2010, 10:10
quelle
2

Weitere Erklärung, lange Zeit für die Antwort zu kommen, aber ich glaube, wenn Sie die Bindung in XAML, und dann in Code ein neues Objekt zu der Eigenschaft zuweisen brechen Sie die Bindung, so müssten Sie die Bindung in wiederholen Code für die Arbeit. Daher die Lösung mit dem schreibgeschützten Hintergrundfeld. Wenn Sie so vorgehen, können Sie keine neue ObservableCollection zuweisen, und Sie werden die Bindung nicht unterbrechen, indem Sie dem Hintergrundfeld ein neues Objekt zuweisen.

    
PerK 07.03.2012 09:46
quelle