Ich habe Probleme beim Aktualisieren von Listbox mit ObservableCollection, wenn sich die Eigenschaft der Sammlung ändert (das Hinzufügen / Entfernen von Elementen aus der Liste funktioniert einwandfrei):
listbox hat ItemsSource="{Binding Path=AllPerson}"
gesetzt und der Datenkontext im Code ist wie folgt gesetzt: this.DataContext = allPersonClass;
.
allPersonClass
enthält ObservableCollection<Person> allPerson
Die Klasse Person
enthält Eigenschaften wie Name usw.
Ich habe die Methode ToString
der Person überschrieben, um Name
-Eigenschaft zurückzugeben, damit listBox gültige Daten anzeigt
Ich habe versucht, Person
implementieren INotifyPropertyChanged
und in jedem Property Setter hat onPropertyChanged(this, "propertyName");
, das ausgeführt wird, aber listBox aktualisiert nie bereits erstelltes Element
Irgendeine Idee, was könnte falsch sein?
hier ist ein Fenster mit listBox xaml
%Vor%Dies ist Teil des DetailView-Fensters, in dem Änderungen vorgenommen werden (an Person gebunden)
%Vor%Hier ist Teil AllPersonClass:
%Vor%BEARBEITEN
Hier ist ein relevanter Teil der Methode zum Speichern von Änderungen in der Detailansicht
%Vor%Beachten Sie, dass Änderungen in "ObservableCollection allPerson" vorgenommen werden. Nur listBox zeigt weiterhin alte Daten an
Wenn Sie möchten, dass die Benutzeroberfläche aktualisiert wird, wenn Sie Änderungen an den Eigenschaften von Personen vornehmen, müssen Sie angeben, dass diese Eigenschaft geändert wurde, nicht die Klasse
%Vor%Sollte
sein %Vor% Und Sie müssen ToString()
nicht für das Person
-Modell überschreiben, damit es in Ihrem ListBox
korrekt angezeigt wird. Sie können ListBox
DisplayMemberPath
so einstellen, dass die gewünschte Eigenschaft in ListBox
%Vor%
Bearbeiten: Um Ihre Kommentarfrage zu beantworten:
%Vor% In Ihrer Detailansicht müssen Sie eine TwoWay-Bindung definieren, um den Eigenschaftsnamen Ihrer person
-Klasse zu aktualisieren.
Auch wenn Sie die Eigenschaft jedes Mal aktualisieren möchten, wenn Text geschrieben wird, müssen Sie auch UpdateSourceTrigger
mit PropertyChanged
definieren. Andernfalls wird die Eigenschaft nur aktualisiert, wenn die TextBox den Fokus verliert.
Ich denke, Sie möchten vielleicht überprüfen, wie Sie die Bindung auf Artikelebene durchführen. Schauen Sie sich diesen Link an, es wird Ihnen helfen:
Bestimmen, ob eine Zeile in ObservableCollection & lt; T & gt; tatsächlich geändert
Tags und Links wpf c# data-binding observablecollection